[gelöst] Fehler mit adc.classdef, Timingproblem wie beseitigen?

Begonnen von franky08, 05 Mai 2015, 17:48:56

Vorheriges Thema - Nächstes Thema

franky08

Hallo folgende classdef liefert im Log ständig Warnungen:

get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
get value postproc {\
my $hexval = hex(trim("$_"));\
my $hash  = $defs{%NAME};\
readingsSingleUpdate($hash, "state", $hexval, 1);\
}


Und im Log:
2015.05.05 17:23:01 1: AVRNETIO: illegal spec expect".*" for get value for class ADC in file /opt/fhem/adc.classdef.

und
2015.05.05 17:40:00 1: PERL WARNING: Illegal hexadecimal digit 'O' ignored at (eval 231) line 1.
2015.05.05 17:40:00 3: eval: { my $hexval = hex(trim("$_")); my $hash  = $defs{MP_2}; readingsSingleUpdate($hash, "state", $hexval, 1);}


Gibt es eine Möglichkeit das abzustellen?

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

Dr. Boris Neubert

Hallo,

ich vermute, dass sich in die Zeile

get value expect ".*"

ein Sonderzeichen eingeschlichen hat. Lösche die Zeile bitte aus der classdef und tippe sie neu ein.

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

franky08

#2
Habe die adc.classdef jetzt noch einmal per "Hand" eingegeben aber im Log immer noch:

2015.05.05 20:21:00 1: PERL WARNING: Illegal hexadecimal digit 'O' ignored at (eval 1546) line 1.
2015.05.05 20:21:00 3: eval: { my $hexval = hex(trim("$_")); my $hash  = $defs{MP_2}; readingsSingleUpdate($hash, "state", $hexval, 1);}


Was mir auffällt "Illegal hexadecimal digit 'O'" wo kommt das O her? Das ist natürlich kein hex. Dachte erst das ist eine Null, scheint aber wirklich ein Buchstabe O zu sein. Da müsste ja irgendwoher ein 4F = O kommen.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

Dr. Boris Neubert

Hallo,

das mit dem O musst Du selbst herausfinden. Es wird von Deinem Gerät gesendet. Bitte den angehefteten Thread beachten, wie man Detailinformationen zum Datenverkehr aus ECMD herauskitzelt.

Grüße
Boris

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

franky08

#4
Hallo hier mal der Log
2015.05.05 21:25:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:25:00 0: AVRNETIO: read "05E \n"
2015.05.05 21:25:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:25:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:26:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:26:00 0: AVRNETIO: read "05D \n"
2015.05.05 21:26:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:26:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:27:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:27:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:27:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:27:00 0: AVRNETIO: read "05D \n"
2015.05.05 21:28:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:28:00 0: AVRNETIO: read "05F \n"
2015.05.05 21:28:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:28:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:29:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:29:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:29:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:29:00 0: AVRNETIO: read "05D \n"
2015.05.05 21:30:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:30:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:30:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:30:00 0: AVRNETIO: read "05E \n"
2015.05.05 21:31:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:31:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:31:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:31:00 0: AVRNETIO: read "05E \n"
2015.05.05 21:32:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 21:32:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 21:32:00 0: AVRNETIO: read "OK\n"
2015.05.05 21:32:00 0: AVRNETIO: read "05F \n"


Das "O" scheint von dem OK\n zu kommen
2015.05.05 22:54:00 0: AVRNETIO: write "ltc1257_set 600\n"
2015.05.05 22:54:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.05 22:54:00 0: AVRNETIO: read "OK\n"


Nach dem write ltc1257 kommt die Antwort read verspätet und bringt das read vom adc aus dem Tritt

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

#5
Das kommt aus der ltc1257.classdef


# Umsetzung in ECMD Befehle
# Ein Uebergabeparameter -> Sollwert
set setDAC params dacValue
set setDAC cmd {"ltc1257_set %dacValue\n"}
set setDAC expect "OK\n"
# Keine Uebergabeparameter
set init cmd {"ltc1257_init\n"}
set init expect "OK\n"
#


VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

#6
Über ein at wird jede Minute eine sub aufgerufen, in dieser werte ich die Differenz von Ist- und Solltemperatur aus und je nachdem wie groß die Differenz ist wird Value vom DAC in das Threshold Modul zurückgeschrieben. Das Threshold Modul steuert dann die Heizung und je nachdem wie groß die Differenztemperatur ist wird wird über DAC Value die Brennerleistung gesteuert.
Ich hatte vergessen das in der sub noch der Rest
if( $stell <= 0 ) {
fhem "set DAC setDAC 600";
}

stand. Somit wurde jede Minute der DAC Wert auf 600 gesetzt, völlig überflüssig da im Threshold:
TH_Sensor_WZ:temperature:0:Temperatur_Tresh_setz_dummy:state |set DAC setDAC 600; set HZ_on_off_dummy off|{HZ_Steuerung_Temp}; set HZ_on_off_dummy on

cmd1_gt ja schon den DAC auf 600 setzt.
Habe das jetzt korrigiert und jetzt taucht die Meldung im Log nur noch auf wenn DAC value neu gesetzt wird, also wenn die Heizung anspringt.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

#7
Wie vermutet, wenn die Heizung dann läuft und der DAC minütlich neu gesetzt wird überlagert das read vom ltc1257 mit der Antwort vom adc. Adc bekommt dann als Antwort das OK vom ltc1257 und das ist natürlich nicht korrekt und es kommt zu der Meldung "Illegal hexadecimal digit 'O' ignored at (eval 1546) line 1"

Wie kann ich das timing ändern, so das die readings an das entprechende device gehen?

Ich habe die ltc1257.classdef jetzt mal so geändert und die expect entfernt. Die Log Meldung tritt nun etwas seltener auf.
2015.05.06 10:34:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.06 10:34:00 0: AVRNETIO: read "0A3 \n"
2015.05.06 10:34:00 0: AVRNETIO: write "ltc1257_set 1700\n"
2015.05.06 10:34:00 0: AVRNETIO: read "OK\n"
2015.05.06 10:35:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.06 10:35:00 0: AVRNETIO: read "0A3 \n"
2015.05.06 10:35:00 0: AVRNETIO: write "ltc1257_set 1700\n"
2015.05.06 10:35:00 0: AVRNETIO: read "OK\n"
2015.05.06 10:36:00 0: AVRNETIO: write "adc get 3\n", expect .*
2015.05.06 10:36:00 0: AVRNETIO: read "0A4 \n"
2015.05.06 10:36:00 0: AVRNETIO: write "ltc1257_set 1700\n"
2015.05.06 10:36:00 0: AVRNETIO: read "OK\n"
2015.05.06 10:37:00 1: PERL WARNING: Illegal hexadecimal digit 'O' ignored at (eval 1334) line 1.
2015.05.06 10:37:00 3: eval: { my $hexval = hex(trim("$_")); my $hash  = $defs{MP_2}; readingsSingleUpdate($hash, "state", $hexval, 1);}


Die ltc1257.classdef:
# Umsetzung in ECMD Befehle
# Ein Uebergabeparameter -> Sollwert
set setDAC params dacValue
set setDAC cmd {"ltc1257_set %dacValue\n"}
# Keine Uebergabeparameter
set init cmd {"ltc1257_init\n"}
######################################


Und die adc.classdef:
get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
get value postproc {\
my $hexval = hex(trim("$_"));\
my $hash  = $defs{%NAME};\
readingsSingleUpdate($hash, "state", $hexval, 1);\
}


VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

Hat keiner eine Idee was man gegen das Timingproblem unternehmen kann oder wie man die Abfrage des ADC erst nach dem write/read vom DAC machen könnte?

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

kpwg

Hallo Frank,

ich verstehe das Problem, konnte es aber so noch nicht so recht nachstellen. Benutze hier 3x E6 per LAN, dahinter zwei ZBus (RS-485) mit aktuell je einem Device. Einige Devices werden dabei 4-6x je Minute bedient und laufen seit Monaten sehr zuverlässig. Mich wundert das Durcheinander im Log- kannst Du vielleicht mit Wireshark o.ä. loggen, wer der Übeltäter ist?

Viele Grüße, Ricardo

franky08

#10
@Ricardo
Hab mir gerade mal Wireshark auf dem Mac installiert aber das "erschlägt" mich leider etwas, was die Einstellungen betrifft. Das AVR-NET-IO läuft auf 192.168.2.111 und die fhem Hauptinstanz auf 192.168.2.66. Leider blicke ich es imo nicht wie ich das in Wireshark eingebe.
P.S. Und Wireshark auf dem mac hat die 192.168.2.24

Wie müsste den der Filter in Wireshark gesetzt werden um an die Informationen zu kommen?
VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

franky08

@kpwg
Hallo, hab den Filter mal auf
ip.src == 192.168.2.111 && ip.dst == 192.168.2.66
gesetzt aber da wird leider nichts aufgezeichnet.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

kpwg

Hängst Du "dazwischen"? Ich habe für solche Fälle immer noch einen alten 10MBit Hub da, mit dem ich mich in die Verbindung zum E6 einklinke und alles mitlese. Oder kann Dein Switch Port-Mirroring? Da kann man auch gut schauen, was so läuft.

Viele Grüße, Ricardo

franky08

Hallo Ricardo, hab jetzt mal einen Switch mit Mirror dazwischen gehangen und mit Wireshark aufgezeichnet was zwischen AVR-NET-IO 192.168.2.111 und dem Netzwerk läuft, 192.168.2.47 ist ein D-lan Adapter der die Verbindung zwischen meinem Netzwerk und dem AVR-NET-IO Board herstellt.

Hab die capture Datei mal angehangen. Habe die Heizung dann mal gestartet (über setzen einer neuen Soll Temperatur) und das Ganze mal ein paar Minuten laufen lassen.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

kpwg

Hallo Frank,

habe mit ip.addr == 192.168.2.111 mal den Traffic zum E6 heraus gefiltert. Ich sehe jedoch nur "ecmd adc get"?