[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"?

franky08

Müsste eigendlich auch ein ltc1257 set dabei sein, mmh. Sonst las ich das Ganze nochmal laufen, ist jetzt blos bischen blöd bei den Außentemperaturen di Heizung laufen zu 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

Nein, kein Stress. Ich schau mir das Logfile nochmals genauer an. Aber erst heute abend. :)

Viele Grüße, Ricardo

franky08

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

Hallo Ricardo, ich versuche jetzt einfach das "OK" auszufiltern. Mit if($value != "OK") in der adc.classdef müsste das doch zu machen sein, oder?

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,
Mir ist es gestern abend nicht gelungen, einen Fehler im Stream zu finden. War alles gut und nichts "durcheinander".  Wo könnten wir noch ansetzen?

Viele Grüße, Ricardo

franky08

Ich baue jetzt schon seit ein paar Stunden an der adc.classdef herum um den fehlerhaften Wert "OK" auszufiltern Ich habe langsam die Vermutung, dass ich beim compilieren von E6 die Fuse Bits vlt. falsch gesetzt habe und der Atmel damit zu "langsam" läuft. Habe einen Atmel 644P auf dem Board und beim make das auch so gesetzt aber mit den fuse Bits habe ich eine Einstellung aus dem Netz verwendet.

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

Ich hab meist low=FF high=D9 "ge-fust". Damit und einem 16Mhz Quarz habe ich keine Sorgen. Wenn jedoch das Timing nicht stimmt, sollte man doch gar nicht auf das System drauf kommen?

franky08

#22
Fuse Bits hab ich genau wie du gesetzt, daran liegt es also nicht, war nur so ein Gedanke von mir. Langsam weis ich auch nicht mehr, wo ich noch suchen soll. Habe jetzt das get adc erst mal disabled und eine sub geschrieben, die das "Pferd" sozusagen von hinten aufzäumt. An Hand der DAC value setze ich die Leistung sozusagen hardcodiert. Über 3500 sind 100 Prozent usw. Dadurch habe ich Abstufungen von jeweils 25 Prozent als Angabe der Leistung. Ist zwar ein dämlicher Workaround aber besser als nichts.

P.S. Und ich versuche gerade dem MAC gcc "beizubringen" um nicht laufend zwischen 3 Rechnern switchen zu müssen (Linux zum compilieren, Windows mit AVR Studio zum flashen und der MAC ist eigendlich mein "Hauptrechner")
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

Ich habe ein altes Notebook, das ausschließlich mit Linux (Debian) läuft. Dort gibts für jedes E6 Projekt ein eigenes Verzeichnis, auch wenn das so nicht im Sinne des Erfinders ist. Hat aber den Vorteil, das ich für jedes E6 immer den speziellen Stand hab, mit dem ich zuletzt "dran" war. Geflasht wird dann auf Kommandozeile per avrdude mit dem Diamex All AVR- eine sehr zuverlässige Geschichte. Mit Usbasp und STK200 war es irgendwann zu nervig- man wusste nie so recht, warum das Flashen gelegentlich doch nicht klappte.  :)

franky08

Hallo, melde mich mal mit dem "altbekannten" Problem zurück :)
Nachdem die Logmeldung:
AVRNETIO: unexpected answer "OK\nOK\n" received (wrote "adc get 0\n", expected .*)
2015.06.03 17:40:00 1: PERL WARNING: Illegal hexadecimal digit 'O' ignored at ./FHEM/99_myUtils.pm line 382.


nicht wegzubekommen war, habe ich kurzerhand ein zweites AVR-Net-IO mit E6 geflasht um mit diesem über ADC 0 die Spannung an MP1 bzw. MP2 zu messen. Die Schaltung ist von der Junkers Stetigregelung:
http://forum.fhem.de/index.php/topic,13653.msg85032.html#msg85032

Jetzt passiert etwas "seltsames"! Verbinde ich MP1 oder MP2 mit dem zweiten AVR-NET-IO Board, springt die Spannung am Steuersignal_Therme (vom ersten AVR_NET_IO Board also der DAC ) sofort auf ca.21V und die Heizung geht natürlich sofort in Betrieb. Jetzt stellt sich mir die Frage, wie das möglich ist?

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

#25
Nach Änderung der classdef´s sind die Logeinträge nun weg!

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);\
readingsSingleUpdate($hexval, 1);\
#}

Auswertung von get value in sub ausgelagert und:

set setDAC params dacValue
set setDAC cmd {"ltc1257_set %dacValue\n"}
set setDAC expect "OK\n"
set init cmd {"ltc1257_init\n"}
set init expect "OK\n"


Warum das vorher nicht funktionierte, ist mir ein Rätsel.

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...