[OBIS V2] - Jetzt auch mit SML-Unterstützung

Begonnen von Icinger, 08 April 2016, 19:54:44

Vorheriges Thema - Nächstes Thema

gnampf

Sollte es eigentlich für das "historische-Werte-Problem" inzwischen eine Lösung geben? Hab hier einen Zählern der auch eine handvoll historische Werte ausspuckt und damit dann den total_consumption mit historischen Werten überschreibt.

2021.02.05 10:28:23 5: OBIS (Stromzaehler) - Msg-Parse: 1-0:1.8.0*255(001666.1854*kWh)
2021.02.05 10:28:23 5: Msg 1-0:1.8.0*255(001666.1854*kWh) is of type Counter
2021.02.05 10:28:23 4: Set total_consumption to 1666.1854
2021.02.05 10:28:23 5: OBIS (Stromzaehler) - Msg-Parse: 1-0:1.8.0*96(00013.3*kWh)
2021.02.05 10:28:23 5: Msg 1-0:1.8.0*96(00013.3*kWh) is of type Counter
2021.02.05 10:28:23 4: Set total_consumption to 13.3
2021.02.05 10:28:24 5: OBIS (Stromzaehler) - Msg-Parse: 1-0:1.8.0*97(00055.0*kWh)
2021.02.05 10:28:24 5: Msg 1-0:1.8.0*97(00055.0*kWh) is of type Counter
2021.02.05 10:28:24 4: Set total_consumption to 55
2021.02.05 10:28:24 5: OBIS (Stromzaehler) - Msg-Parse: 1-0:1.8.0*98(00277.7*kWh)
2021.02.05 10:28:24 5: Msg 1-0:1.8.0*98(00277.7*kWh) is of type Counter
2021.02.05 10:28:24 4: Set total_consumption to 277.7
2021.02.05 10:28:24 5: OBIS (Stromzaehler) - Msg-Parse: 1-0:1.8.0*99(00000.0*kWh)
2021.02.05 10:28:24 5: Msg 1-0:1.8.0*99(00000.0*kWh) is of type Counter
2021.02.05 10:28:24 4: Set total_consumption to 0
2021.02.05 10:28:24 5: OBIS (Stromzaehler) - Msg-Parse: 1-0:1.8.0*100(01666.1*kWh)
2021.02.05 10:28:24 5: Msg 1-0:1.8.0*100(01666.1*kWh) is of type Counter
2021.02.05 10:28:24 4: Set total_consumption to 1666.1

der Zähler sendet SML.

hdgucken

Zitat von: gnampf am 05 Februar 2021, 16:10:34
Sollte es eigentlich für das "historische-Werte-Problem" inzwischen eine Lösung geben? Hab hier einen Zählern der auch eine handvoll historische Werte ausspuckt und damit dann den total_consumption mit historischen Werten überschreibt.

setze mal das Attribut "extChannels" auf on ...

hdgucken

Hallo Georg und Daniel,

brüte und probiere nun schon den ganzen Vormittag, aber bin bis jetzt nicht wirklich weiter ;(

@Georg: Das "($)" bei der callback function muss wohl so sein, meiner Meinung nach sogar eher "($$)", aber egal was ich da auch einsetze, es passiert immer das gleiche: $error ist angeblich nichts zugewiesen laut Log. Wen ich mal "@_" in der callback function  abfrage, steht da auch nur "2" drinnen und kein Fehlertext, wie im DevIo Wiki beschrieben, merkwürdig. Es sollte etwas in der Art übergeben werden:
"OBIS_Callback($hash, $error)".

gvzdus

Probiere mal nicht weiter, die Lösung ist einfach:
Callback wird nicht nur im Fehlerfall, sondern auch im Erfolgsfall aufgerufen. Der Code ist da suboptimal. Ich bastele gerade, kann aber Dein Problem nicht nachvollziehen.
Habe mir einfach mit "netcat" 2 Pseudo-TCP-Server gebaut und fahre die hoch- und runter. Bei mir kommt nach 60 Sekunden der Reconnect-Versuch und die Dinger stehen dann wieder auf "connected".

Es kommt noch was im Laufe des Abends, ich weiß nur nicht, ob es helfen wird.

gmxspooker

Zitat von: gvzdus am 04 Februar 2021, 22:23:45
Moin, ich habe jetzt "Thomas", "DZG-Patch in sauber" und meinen originalen Speedpatch zusammengemischt.

Die Bitte an Domenik: Bitte testen, ob es noch immer beim "Nicht-Negativen" bleibt. ("DZG-Patch").
Die Bitte an Thomas: Habe ich richtig gemerged?

Falls beides positiv ist, könnten wir mal an Icinger rantreten und fragen, ob er übernehmen und offiziell machen mag.

Ansonsten wäre meine Idee, ein paar Readings mehr mit Namen zu versehen. Ich habe z.B. für die drei Einzelwerte der Phasen für meinen ISK-Zähler definiert:

channels: {"1.0.36.7.0.255"=>"power_L1","1.0.56.7.0.255"=>"power_L2","1.0.76.7.0.255"=>"power_L3"}


Hallo Georg,
habe das neue Modul Heute eingespielt.
Ich erhalte keine negativen Werte.
Allerdings bekomme ich folgende Fehlermeldungen beim Neuladen des Moduls:

2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Initialize redefined at /opt/fhem/FHEM/47_OBIS.pm line 86.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Define redefined at /opt/fhem/FHEM/47_OBIS.pm line 107.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Get redefined at /opt/fhem/FHEM/47_OBIS.pm line 208.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Set redefined at /opt/fhem/FHEM/47_OBIS.pm line 223.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine GetUpdate redefined at /opt/fhem/FHEM/47_OBIS.pm line 251.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Init redefined at /opt/fhem/FHEM/47_OBIS.pm line 269.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Undef redefined at /opt/fhem/FHEM/47_OBIS.pm line 275.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Read redefined at /opt/fhem/FHEM/47_OBIS.pm line 284.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_trySMLdecode redefined at /opt/fhem/FHEM/47_OBIS.pm line 343.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Parse redefined at /opt/fhem/FHEM/47_OBIS.pm line 462.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Ready redefined at /opt/fhem/FHEM/47_OBIS.pm line 654.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_Attr redefined at /opt/fhem/FHEM/47_OBIS.pm line 670.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_adjustAlign redefined at /opt/fhem/FHEM/47_OBIS.pm line 753.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_hex2int redefined at /opt/fhem/FHEM/47_OBIS.pm line 784.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_CRC16 redefined at /opt/fhem/FHEM/47_OBIS.pm line 792.
2021.02.05 18:10:15 1: PERL WARNING: Subroutine OBIS_decodeTL redefined at /opt/fhem/FHEM/47_OBIS.pm line 833.
2021.02.05 18:10:21 3: OBIS (Stromzaehler) - Unknown Message: 1-0:96.50.1*255(DZG)
Please report to User icinger at forum.fhem.de


Gruß Domenik

hdgucken

#1055
Zitat von: gvzdus am 05 Februar 2021, 17:55:48
Probiere mal nicht weiter, die Lösung ist einfach:
Callback wird nicht nur im Fehlerfall, sondern auch im Erfolgsfall aufgerufen. Der Code ist da suboptimal. Ich bastele gerade, kann aber Dein Problem nicht nachvollziehen.
Habe mir einfach mit "netcat" 2 Pseudo-TCP-Server gebaut und fahre die hoch- und runter. Bei mir kommt nach 60 Sekunden der Reconnect-Versuch und die Dinger stehen dann wieder auf "connected".

Es kommt noch was im Laufe des Abends, ich weiß nur nicht, ob es helfen wird.

Die 60 Sekunden sind Standard, wenn nichts Anderes angegeben wird  ;)
konnte es nicht lassen, diese callback scheint ok zu sein  :)

sub OBIS_Callback($;$)
{
    my ($hash, $error) = @_;
    my $name = $hash->{NAME};

    # create a log emtry with the error message
    Log 3,"OBIS $name - error while connecting: $error" if ($error);
   
    return undef;
}


P.S. Diese Callback funktioniert, hab getestet ;o)

gvzdus

@Domenik:
ZitatAllerdings bekomme ich folgende Fehlermeldungen beim Neuladen des Moduls:
Die "redefined" sind strunznormal beim reload des Moduls. Bestimmte Dinge (kann ich aber nicht beschreiben) erfordern aber einen harten Shutdown-Restart.

Das "...report to user icinger" ist großer Mist. Das habe ich persönlich wieder aktiviert, er hatte es deaktiviert. Geht natürlich gar nicht, fehlt nur, dass ich noch seine Handynummer reinschreibe (wenn ich sie hätte). Ist jetzt raus. Aber ich logge trotzdem alles, was nur als Zahlen in den Readings auftaucht.

@Daniel:
Ich habe in der Version jetzt mal bei dem Reopen so rumgefummelt, wie es die anderen Kinder in ihren Modulen machen. Guck doch bitte mal, ob es was bringt!

@gnampf:
Klar, wir haben gerade Wünsch-Dir-Was-Tage :-) Wenn der Tipp mit extChannels nicht hilft, sag' Bescheid.

Außerdem ist in der Version jetzt die Hilfe eingepflegt und korrigiert.

hdgucken

@Georg: die OBIS_Ready function hatte ich völlig vergessen, hab ich auch angepasst auf ser2net. Die wird aufgerufen, wenn die Verbindung nicht aufgebaut werden konnte, also bei Status "disconnected". Dafür musste ich meine Variable "$netdev" modulweit verfügbar machen, steht deshalb jetzt ganz am Anfang des Moduls.

Hab jetzt noch folgenden Fehler neu:
2021.02.05 19:32:09 1: PERL WARNING: Use of uninitialized value $code in concatenation (.) or string at ./FHEM/47_OBIS.pm line 536

gvzdus

Ja, ich habe das ReadyFN angepasst und da auch den Reopen-Parameter auf 1 gesetzt - vielleicht bringt das was.

Nein, das mit der globalen Variable ist mir nicht aufgefallen. Das habe ich in meiner Variante ja in den Hash reingezogen. Das ist m.E. auch sauberer, denn wen schon Leute 3 Zähler damit auslesen, vielleicht mischen dann andere OBIS-Over-Net mit OBIS-USB. Und "netdev" ist etwas allgemein für global.

Der "neue" Fehler ist vermutlich mein Versuch, die Vendor-Zeile mit dem DSZ-Zähler als "ManufID2" zu deklarieren. Vielleicht Mist. Kannst Du die Zeile oben mit "ManufID2" mal löschen?

hdgucken

#1059
Zitat von: gvzdus am 05 Februar 2021, 19:54:57
Ja, ich habe das ReadyFN angepasst und da auch den Reopen-Parameter auf 1 gesetzt - vielleicht bringt das was.

Nein, das mit der globalen Variable ist mir nicht aufgefallen. Das habe ich in meiner Variante ja in den Hash reingezogen. Das ist m.E. auch sauberer, denn wen schon Leute 3 Zähler damit auslesen, vielleicht mischen dann andere OBIS-Over-Net mit OBIS-USB. Und "netdev" ist etwas allgemein für global.

Der "neue" Fehler ist vermutlich mein Versuch, die Vendor-Zeile mit dem DSZ-Zähler als "ManufID2" zu deklarieren. Vielleicht Mist. Kannst Du die Zeile oben mit "ManufID2" mal löschen?

Das sieht doch viel professioneller aus, bin nicht ganz so per Du mit Perl  ;)
Habe gerade getestet, die Zeile mit "ManufID" ist auskommentiert. Funktioniert soweit, bis auf den Fehler in Zeile 536, der bleibt. In "$code" ist nichts drin  :o
siehe hier im Log:
2021.02.05 21:06:10 3: Storing  for 1-0:1.8.0*96 in Cache
2021.02.05 21:06:10 3: Storing  for 1-0:1.8.0*97 in Cache
2021.02.05 21:06:10 3: Storing  for 1-0:1.8.0*98 in Cache
2021.02.05 21:06:10 3: Storing  for 1-0:1.8.0*99 in Cache
2021.02.05 21:06:10 3: Storing  for 1-0:1.8.0*100 in Cache


Nachtrag: In der html Hilfe fehlt jeweils beim "Example" am Ende der ersten Zeile ein <br> für den Zeilenumbruch, sonst perfekt  :)

gnampf

hdgucken:
perfekt, extChannels auf on hat geholfen und stellt mir jetzt einzelne Readings zur Verfügung!

gvzdus:
also wenn wir wünsch dir was haben: ich wünsche mir eine Beschreibung der Attribute die FHEM dann anzeigt ;-)

hdgucken

Zitat von: gnampf am 05 Februar 2021, 21:34:14
hdgucken:
perfekt, extChannels auf on hat geholfen und stellt mir jetzt einzelne Readings zur Verfügung!

gvzdus:
also wenn wir wünsch dir was haben: ich wünsche mir eine Beschreibung der Attribute die FHEM dann anzeigt ;-)

@gnampf: super, das Problem kannte ich  ;)

@Georg: Ich hab mir das mit Zeile 533 nochmal angesehen, meintest Du vielleicht "$c" statt "$code" ?
Hab ich mal geändert, jetzt siehts so aus:

2021.02.05 22:07:13 3: Storing Counter for 1-0:1.8.0*96 in Cache
2021.02.05 22:07:13 3: Storing Counter for 1-0:1.8.0*97 in Cache
2021.02.05 22:07:13 3: Storing Counter for 1-0:1.8.0*98 in Cache
2021.02.05 22:07:13 3: Storing Counter for 1-0:1.8.0*99 in Cache
2021.02.05 22:07:13 3: Storing Counter for 1-0:1.8.0*100 in Cache


Gruß Thomas

gvzdus

Beim 15. Mal drauf gucken ist es mir auch aufgefallen :-)

Hier jetzt die noch bessere Edition:
a) Kein Warning-Geplärre
b) Zeilenumbruch in der Hilfe
c) Die "Unknown Message" message kommt jetzt für jede Sequenz nur einmal.

Ich selber habe z.B. das hier im Logfile:
Unknown Message: 215-112:120.24.28*255()


ioT4db

Zitat von: gvzdus am 05 Februar 2021, 19:40:13
...

@Daniel:
Ich habe in der Version jetzt mal bei dem Reopen so rumgefummelt, wie es die anderen Kinder in ihren Modulen machen. Guck doch bitte mal, ob es was bringt!
...
Außerdem ist in der Version jetzt die Hilfe eingepflegt und korrigiert.

nabend zusammen,

habs gerade ausgiebig getestet, leider ohne Erfolg.  :'(

keine Ahnung was da noch reinspielen könnte. Ich habe nochmal ein Log angehangen. Der Disconnect war bei 22:21:11.

VG
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

gvzdus

Naja, der Log zeigt ja als allerletzte Zeile:

2021.02.05 22:22:11.638 1:  192.168.41.150:20010 reappeared (Mythz)

Also genau nach den zu erwartenden 60 Sekunden probiert er es wieder und findet das Device. Eigentlich wird es ja dann erst spannend: Da kommt dann im Folgenden nichts mehr von Mythz? Vorher ist Mythz im Logfile aber auch nicht die Plappersuse im Vergleich zu StromZ1.

Ich glaube übrigens, verbose 4 reicht.