Doppelte Einträge bei ECMDDevices

Begonnen von larrysteward, 13 Januar 2016, 19:26:04

Vorheriges Thema - Nächstes Thema

larrysteward

Hallo,

ich bekomme immer wenn ich ein ECMDDevice abfrage zwei Einträge im Event Monitor und damit auch im Log. Das sieht dann beispielsweise so aus:
2016-01-13 18:32:02 ECMDDevice EsszimmerHeizung temp: 48.88
2016-01-13 18:32:02 ECMDDevice EsszimmerHeizung temp 48.88
2016-01-13 18:34:50 ECMDDevice FSA on
2016-01-13 18:34:52 ECMDDevice FSA off
2016-01-13 18:35:07 ECMDDevice VDRlaeuft read: 0
2016-01-13 18:35:07 ECMDDevice VDRlaeuft read 0

Die erste Temperatur wird per 1-Wire abgefragt.
Der Schalter schickt nur einen Befehl --> nur jeweils ein Eintrag
Die Abfrage eines Pin per io get pin liefert wieder zwei Einträge im Log.

Der Unterschied der beiden Einträge ist, dass der erste mit Doppelpunkt geschrieben wird, der zweite ohne.

Meine FHEM.cfgattr global userattr cmdIcon devStateIcon devStateStyle icon referenz grenzwert sensor sortby status webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global latitude 48.17246
attr global logfile ./log/fhem-%Y-%m.log
attr global longitude 12.82186
attr global modpath .
attr global motd none
attr global room System
attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 5

define telnetPort telnet 7072 global
attr telnetPort room System

define WEB FHEMWEB 8083 global
attr WEB room System

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
attr Logfile room System

define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log
attr autocreate room System

define eventTypes eventTypes ./log/eventTypes.txt
attr eventTypes room System

define NETIOKG ECMD telnet 192.168.8.4:2701
attr NETIOKG classdefs ONEWIRE=/opt/fhem/onewire.classdef:ADC=/opt/fhem/adc.classdef:IO=/opt/fhem/io.classdef
attr NETIOKG requestSeparator �
attr NETIOKG room Keller,System
define Abfrage at +*00:10 get Arbeitszimmer temp;; get aussen temp;; get AZOfen temp;; get Esszimmer temp;; get EsszimmerHeizung temp;; get JansZimmer temp;; get Keller temp;; get Kleiderschrank temp;; get Ruecklauf temp;; get VDR temp;; get Vorlauf temp;; get Warmwasser temp;; get Wohnzimmer temp;; get VDRlaeuft read
attr Abfrage room System
define NETIOAZ ECMD telnet 192.168.8.5:2701
attr NETIOAZ classdefs ONEWIRE=/opt/fhem/onewire.classdef:ADC=/opt/fhem/adc.classdef:IO=/opt/fhem/io.classdef
attr NETIOAZ requestSeparator �
attr NETIOAZ room Arbeitszimmer,System
define NETIOSZ ECMD telnet 192.168.8.6:2701
attr NETIOSZ classdefs RFM12=/opt/fhem/2272.classdef:ONEWIRE=/opt/fhem/onewire.classdef:IO=/opt/fhem/io.classdef:ADC=/opt/fhem/adc.classdef
attr NETIOSZ requestSeparator �
attr NETIOSZ room Schlafzimmer,System
define FSA ECMDDevice RFM12 21 5 80
attr FSA IODev NETIOSZ
attr FSA room Schlafzimmer
define EsszimmerHeizung ECMDDevice ONEWIRE 28826A150600005E
attr EsszimmerHeizung IODev NETIOAZ
attr EsszimmerHeizung room Esszimmer
define Log_Temperatur FileLog /opt/fhem/log/Temperatur-%Y.log AZOfen:.*|Arbeitszimmer:.*|Esszimmer:.*|EsszimmerHeizung:.*|JansZimmer:.*|Keller:(temp).*|Kleiderschrank:.*|Ruecklauf:.*|VDR:.*|VDRlaeuft:read.*|Vorlauf:.*|Warmwasser:.*|Wohnzimmer:.*|aussen:.*
attr Log_Temperatur room System
define VDRlaeuft ECMDDevice IO
attr VDRlaeuft IODev NETIOSZ
attr VDRlaeuft room Schlafzimmer


Die dazugehörigen classdefs:
# Uebergabeparameter Onewire Geräte ID
params devID
# Umsetzung in ECMD Befehle 1w convert = Messung auslösen, 1w get = Tempwert lesen
set messen cmd {"1w convert\n"}
set messen expect "OK\n"
get temp cmd {"1w get %devID\n"}
get temp expect "\d+.\d+\n"
#get temp postproc {s/\n//;}

# keine Uebergabeparameter Digital-IO Abfrage des Ports 0
# Umsetzung in ECMD Befehle
get read cmd {"io get pin 0\n"}
get read expect ".*"    #"port 0: 0x\d+\n"
get read postproc {\
my $hex = "$_";\
$hex =~ s/port 0: //;\
$hex =~ s/\n//;\
my $dez = hex($hex);\
my $retvar = $dez & 1;\
}

Log zu 1-wire:
2016.01.13 18:49:30 4: Connection closed for FHEMWEB:192.168.8.21:51109: EOF
2016.01.13 18:49:30 4: FHEMWEB:192.168.8.21:51107 GET /fhem?detail=EsszimmerHeizung; BUFLEN:0
2016.01.13 18:49:30 4: name: /fhem?detail=EsszimmerHeizung / RL:2570 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2016.01.13 18:49:30 4: Connection closed for FHEMWEB:192.168.8.21:51107: EOF
2016.01.13 18:49:30 4: FHEMWEB:192.168.8.21:51106 GET /fhem?detail=EsszimmerHeizung; BUFLEN:0
2016.01.13 18:49:30 4: name: /fhem?detail=EsszimmerHeizung / RL:2570 / text/html; charset=UTF-8 / Content-Encoding: gzip
/
2016.01.13 18:49:31 4: FHEMWEB:192.168.8.21:51106 GET /fhem?cmd={ReadingsVal(%22EsszimmerHeizung%22,%22messen%22,%22%22)}&XHR=1; BUFLEN:0
2016.01.13 18:49:31 5: Cmd: >{ReadingsVal("EsszimmerHeizung","messen","")}<
2016.01.13 18:49:31 4: name: /fhem?cmd={ReadingsVal(%22EsszimmerHeizung%22,%22messen%22,%22%22)}&XHR=1 / RL:21 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.01.13 18:49:31 4: FHEMWEB:192.168.8.21:51108 GET /fhem?cmd={AttrVal(%22EsszimmerHeizung%22,%22room%22,%22%22)}&XHR=1; BUFLEN:0
2016.01.13 18:49:31 5: Cmd: >{AttrVal("EsszimmerHeizung","room","")}<
2016.01.13 18:49:31 4: name: /fhem?cmd={AttrVal(%22EsszimmerHeizung%22,%22room%22,%22%22)}&XHR=1 / RL:30 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.01.13 18:49:31 4: FHEMWEB:192.168.8.21:51106 GET /fhem?XHR=1&inform=type=status;filter=EsszimmerHeizung;since=1452707369;fmt=JSON×tamp=1452707357712; BUFLEN:0
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51108 POST /fhem?detail=EsszimmerHeizung&dev.getEsszimmerHeizung=EsszimmerHeizung&cmd.getEsszimmerHeizung=get&arg.getEsszimmerHeizung=temp&val.getEsszimmerHeizung=&XHR=1&addLinks=1; BUFLEN:0
2016.01.13 18:49:33 5: Cmd: >get EsszimmerHeizung temp<
2016.01.13 18:49:33 5: ECMDDevice: Analyze command >{"1w get 28826A150600005E\n"}<
2016.01.13 18:49:33 5: NETIOAZ: sending command "1w get 28826A150600005E\n"
2016.01.13 18:49:33 5: SW: 31772067657420323838323641313530363030303035450a
2016.01.13 18:49:33 5: NETIOAZ: received answer "42.75\n"
2016.01.13 18:49:33 5: Triggering EsszimmerHeizung (2 changes)
2016.01.13 18:49:33 5: Notify loop for EsszimmerHeizung temp: 42.75

2016.01.13 18:49:33 4: name: /fhem?detail=EsszimmerHeizung&dev.getEsszimmerHeizung=EsszimmerHeizung&cmd.getEsszimmerHeizung=get&arg.getEsszimmerHeizung=temp&val.getEsszimmerHeizung=&XHR=1&addLinks=1 / RL:32 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51108 GET /fhem/pgm2/images/ui-bg_glass_100_f6f6f6_1x400.png; BUFLEN:0
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51108 => 304 Not Modified
2016.01.13 18:49:33 4: Connection accepted from FHEMWEB:192.168.8.21:51110
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51108 GET /fhem/pgm2/images/ui-bg_diagonals-thick_20_666666_40x40.png; BUFLEN:0
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51108 => 304 Not Modified
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51110 GET /fhem/pgm2/images/ui-icons_222222_256x240.png; BUFLEN:0
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51110 => 304 Not Modified
2016.01.13 18:49:33 4: Connection accepted from FHEMWEB:192.168.8.21:51111
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51111 GET /fhem/pgm2/images/ui-bg_glass_100_fdf5ce_1x400.png; BUFLEN:0
2016.01.13 18:49:33 4: FHEMWEB:192.168.8.21:51111 => 304 Not Modified
2016.01.13 18:49:36 4: FHEMWEB:192.168.8.21:51108 GET /fhem/pgm2/images/ui-bg_glass_65_ffffff_1x400.png; BUFLEN:0
2016.01.13 18:49:36 4: FHEMWEB:192.168.8.21:51108 => 304 Not Modified
2016.01.13 18:49:39 4: Connection closed for FHEMWEB:192.168.8.21:51106: EOF
2016.01.13 18:49:39 4: FHEMWEB:192.168.8.21:51108 GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2016-01.log; BUFLEN:0
2016.01.13 18:49:41 4: FHEMWEB:192.168.8.21:51110 GET /fhem/FileLog_logWrapper?dev=Logfile&type=text&file=fhem-2016-01.log; BUFLEN:0


Könnt ihr mir sagen, woher der zweite Eintrag kommt?

Gruß,
Larry
Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

larrysteward

Ich  habe gerade gelesen, dass dieses Phänomen wohl seit dem letzten Update auftritt: http://forum.fhem.de/index.php/topic,45330.msg371188.html#msg371188

Hat sich jemand dieses Themas angenommen?

Hier scheint ja bei den Readings die Temperatur zweimal eingetragen zu werden:
messen  OK        [Zeit]
state   temp 26.1 [Zeit]
temp    26.1      [Zeit]


Wie unterbinde ich diesen Effekt?

Gruß,
Larry
Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

Dr. Boris Neubert

Hallo,

ich kümmere mich derzeit um Calendar. Sobald ich wieder Zeit habe, arbeite ich den Rückstand an Fragen zu ECMD ab. Ich bitte um Geduld.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

larrysteward

Hallo Boris,

wie sieht es denn inzwischen mit den doppelten Einträgen aus? Ich habe mich dazu nicht mehr gemeldet, ist aber nach wie vor ein Thema.

Danke und Gruß,
Larry
Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

LuckyDay

Ich hatte damals immer bei jedem Device den Eintrag
z.B.
Zitatattr Garage_Temp1 event-on-change-reading temp

gesetzt, damit waren die doppelten Einträge weg

Dr. Boris Neubert

Hallo,

ich musste bei mir auch erst ein Gerät finden, bei dem ich event-on-change-reading nicht gesetzt habe, um das Verhalten sehen zu können.

In 67_ECMDDevice.pm in Zeile 144 steht

        readingsBulkUpdate($hash, "state", $state) if(defined($state));

Bitte setze bei Dir einmal ein # davor und lade das Modul neu. Ist die Dopplung dann weg?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

larrysteward

Ich habe die Zeile auskommentiert und bekomme nur noch einen Wert - so weit so gut. Es kommen beim Neuladen des ECMD-Modules folgende Fehlermeldungen:
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Initialize redefined at ./FHEM/67_ECMDDevice.pm line 40.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_AnalyzeCommand redefined at ./FHEM/67_ECMDDevice.pm line 58.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_GetDeviceParams redefined at ./FHEM/67_ECMDDevice.pm line 67.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_DeviceParams2Specials redefined at ./FHEM/67_ECMDDevice.pm line 81.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_GetCachedSpecials redefined at ./FHEM/67_ECMDDevice.pm line 96.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_ReplaceSpecials redefined at ./FHEM/67_ECMDDevice.pm line 109.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Changed redefined at ./FHEM/67_ECMDDevice.pm line 123.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_PostProc redefined at ./FHEM/67_ECMDDevice.pm line 155.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_EvalCommand redefined at ./FHEM/67_ECMDDevice.pm line 171.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_GetCachedReadingsCommand redefined at ./FHEM/67_ECMDDevice.pm line 185.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Get redefined at ./FHEM/67_ECMDDevice.pm line 205.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Set redefined at ./FHEM/67_ECMDDevice.pm line 254.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_GetCachedReadingsMatch redefined at ./FHEM/67_ECMDDevice.pm line 303.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Parse redefined at ./FHEM/67_ECMDDevice.pm line 318.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_AssignClass redefined at ./FHEM/67_ECMDDevice.pm line 432.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Attr redefined at ./FHEM/67_ECMDDevice.pm line 477.
2016.11.06 16:40:30 1: PERL WARNING: Subroutine ECMDDevice_Define redefined at ./FHEM/67_ECMDDevice.pm line 493.


Ignoriere ich die oder verschlimmbessere ich da was?

Das event-on-change-reading habe ich bisher nirgens gesetzt. Sollte ich das noch tun? Ist das die bessere Variante?

Gruß,
Larry
Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

Dr. Boris Neubert

Hallo Larry,

Danke fürs testen.

Die PERL WARNINGs sind normal wegen des Reloads.

Ich sehe mir mal an, ob ich ein

attr <name> noState

einführe. Dann wird das state-Reading nicht gesetzt und es gibt dementsprechend auch den zweiten Eintrag im Log nicht mehr. Bei Dir ist das jetzt hart auskommentiert.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

larrysteward

Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

Dr. Boris Neubert

Hallo,

bitte nimm die beigefügte Datei und ersetze die gleichnamige Datei in Deiner FHEM-Installation (nach vorheriger Sicherung) damit. Dann lade bitte das Modul erneut. Wenn es bei Dir klappt, checke ich die Datei ein.

Du musst das Attribut

attr EsszimmerHeizung noState 1

setzen.

Viele Grüße
Boris

Attributes

...
noState

Changes of readings do not change the state reading if this attribute is set to a non-zero value. For example, this is desirable if you need to avoid the second event created by changing the state reading. Previously created state readings can be deleted by means of deletereading. The user can define the value shown in the state of the device by means of the stateFormat attribute.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

larrysteward

#10
Hallo Boris,

ich habe mit der geänderten Datei für alle ECMDDevices noState 1 gesetzt. Sieht gut aus, auch die Log-Dateien und Diagramme werden noch ordnungsgemäß geschrieben.

Allerdings bekam ich in der Zwischenzeit nach Laden der neuen 67_ECMDDevice.pm und hinzufügen des noState-Attributes für die noch nicht gesetzten Sensren keinen Wert. Ohne das Attribut gibt es dann wohl keinen Wert mehr. Wenn das so stimmt, müsste darauf hingewiesen werden sonst gibt's Probleme mit den anderen Bestandsinstallationen.

Ergänzung: Muss einen anderen Hintergrund gehabt haben. Ich habe nun für einen Sensor das noState Attribut entfernt und bekam wieder beide Werte auch im Log. Also kein Einfluss auf Bestandsinstallationen.

Gruß,
Larry
Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

Dr. Boris Neubert

eingecheckt - ab morgen per update verfügbar
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!