99_OZW672 - Modul zur Anbindung Siemens Webserver OZW672

Begonnen von hulzer, 08 Oktober 2015, 14:59:48

Vorheriges Thema - Nächstes Thema

hulzer

Hallo zusammen,

für das Auslesen einer Brennwertheizung per BSB/LPB verwende ich einen Siemens Webserver OZW672.
Auf Basis dieses Beitrags http://forum.fhem.de/index.php/topic,32866.msg252542.html#msg252542 habe ich ein Modul erstellt. Vielen Dank nochmals an Lanhydrock für die Inspiration.

Das Modul läuft jetzt seit dem Frühjahr problemlos und ruft alle 30 Sekunden die Werte von 20 Parametern ab.

Die Konfiguration erfolgt über ein paar wenige Parameter:

define boiler OZW672
attr boiler interval 30
attr boiler ozw672host 192.168.1.100
attr boiler ozw672username user1
attr boiler ozw672password pwd1
attr boiler dataPointDefinitions vorlauf:672,ruecklauf:656,kessel:707


Gerne stelle ich den Quellcode hierzu zur Verfügung.

UPDATE 2016-02-11

  • Neues Attribut ozw672protocol zur Auswahl http / https
  • Setzen von Werten über set-Command (asynchron)

Gruß
Hulzer

pappn

Vielen Dank für das Modul. Habe meinen OZW672 aktuell mit HTTPMOD am laufen. Das Modul lasse ich jetzt testweise mitlaufen. Die Definition ist auf jeden Fall schon mal etwas einfacher.

Kleine Anmerkung: Das Modul wollte zuerst nicht laden. Mir fehlte das DBI.pm Packet. Ich war jetzt einfach mal frech und habe "use DBI;" auskommentiert. Modul lädt jetzt und liefert Werte ohne weitere Fehlermeldung.
Frage: Wird das Modul DBI.pm wirklich benötigt?

Pappn
"When all else fails, read the instructions."

CUL868, RFXTFX433 und CCU3
FS20, S300TH, UNIRoll, Homematic IP, OZW672, diverse HOMEEASY, IT kompatible und China Zeugs

hulzer

Zitat von: pappn am 08 Oktober 2015, 20:58:06
Frage: Wird das Modul DBI.pm wirklich benötigt?
Danke für den Hinweis, ist noch ein Überbleibsel vom Testen. Ist jetzt entfernt.

snoopy86

Hello,

sory i don't speek German. I wan't to ask if anyone is pushing the data from OZW672 to EMONCMS? How could this be done?

Thank you.

gestein

Hallo,
ich würde das Modul gerne für meinen OZW772 nutzen.

Das Definieren habe ich noch kapiert ;-)
Aber wie geht's dann weiter?

Wie funktioniert z.B. das mit dem "STATE" und dem "stateFormat"?
Und wie kann man dann einen Datenpunkt auslesen bzw. setzen?

Danke im Voraus
liebe Grüße
Gerhard

gestein

Hallo,
nach einigem Suchen bin ich wieder auf meinen alten Fehler gekommen (siehe http://forum.fhem.de/index.php?topic=43173).

Im Modul werden die Abfragen über "https://" gemacht. Das funktioniert bei mir nicht.
Nachdem ich alles auf "http://" geändert habe (2 Aufrufe), funktioniert alles.
Auch der Status wird richtig angezeigt.

Was ich aber noch nicht verstanden habe, ist der Unterschied zwischen DataPointDefinition und UserReadings.
Ist der Syntax derselbe?

Wie kann ich Werte wieder an einen DataPoint schreiben?

Danke im Voraus
liebe Grüße
Gerhard


leuschman

Guten Abend,

durch die Aktualisierung meiner Synology war es wieder einmal notwendig PERL und JSON mit zu aktualisieren bzw. nochmals zu installieren. Im Zuge dessen habe ich mal mein FHEM ebenso einem UPDATE unterzogen und musste feststellen, dass sich nach einer Verbindung zum OZW672.01 immer den Eintrag:

2016.04.04 21:46:21 3: telnetForBlockingFn_1459799181: port 57450 opened
2016.04.04 21:47:21 3: Still running.
2016.04.04 21:47:51 3: Still running.
2016.04.04 21:48:21 3: Still running.
2016.04.04 21:48:51 3: Still running.

erhalte.

Ich habe bereits vor 2 Wochen auf die aktualisierte 99_OZW672.pm umgestellt - aber dabei noch nicht den FHEM aktualisiert. Die Änderungen am BlockingCall sind noch recht frisch 03.01.2016 (http://www.fhemwiki.de/wiki/Blocking_Call) - hatten mich aber bisher nicht gestört; nun schon, da nichts mehr so richtig läuft...

Irgend eine Idee?

Gruss
Leuschman

leuschman

#8
Nochmals Guten Abend!

Da ich keine Antwort bisher erhalten habe, blieb mir nichts anderes übrig, mich komplett mit der Installationen von FHEM nochmals zu beschäftigen und stellte fest, dass sich zwischen meiner "alten" FHEM 5.3 und der jetzigen 5.7 doch einiges getan hat und deshalb habe ich eine Neuinstallation durchgeführt - und siehe da, die Meldung:

... telnetForBlockingFn_1459799181: port 57450 opened

war schon mal weg.
Weiterhin nervend erschienen aber die "Still Running"-Meldungen. Diese stellen sich wie folgt dar:
Die Meldung "Still Running" kommt nach dem 2. Datenabruf; hier bleibt die Kommunikation irgendwie stehen - auch ein TimeOut erfolgt nicht.
Komischerweise klappt der erste Aufruf - hier konnte ich durch LOG-Print sehen, dass das Blocking auch gelöscht wird; nur nach dem 2. Aufruf nicht mehr.

Heute habe ich mir nochmals das FHEM-LOG angesehen und dort eine kleinen Eintrag zum 99_OZW672.pm gefunden:

... Smartmatch is experimental at ./FHEM/99_OZW672.pm line 305.

Also schnell mal den Bereich auskommentiert

        # Ausgeblendet, da Meldung im FHEM-LOG: "Smartmatch is experimental at ./FHEM/99_OZW672.pm line 305."
   #foreach my $r (keys %{$hash->{READINGS}})
   #{
   #   next if (defined($hash->{'.userReadings'}{$r}));   
   #   if (not $r ~~ @used)
   #   {
   #      delete $hash->{READINGS}{$r};   
   #   }
   #}

- und was soll man sagen, es geht!!

Bitte doch mal prüfen, was die Routine macht. Bin in PERL nicht so firm.

Gruß
Leuschman

hulzer

Hallo,

der auskommentierte Code ist noch aus der Entwicklungsphase des Moduls und kann entfernt werden.

Gruß
Hulzer

colhicks

Hallo hulzer,

einfach cool. Lies sich in 2 Minuten aktivieren, und tut was es soll.

nur gar nicht so einfach zu finden im Forum ;) war erst mit httpmod unterwegs.... bin aber am JSON-Parsing gescheitert.

Deine Lösung macht genau das was ich brauche für meine OZW ;)

Vielen Dank + Gruß

colhicks

KoDe001

Hallo Hulzer, hallo Rest,

vorab möchte ich auch Danke fürs Bereitstellen sagen! ;)

Leider läufts bei mir mit FHEM 5.8 nicht richtig. Für eine Fehlersuche bin noch zu neu was FHEM / Perl angeht...

Nach einem FHEM Neustart werden meine Werte einmal geholt, beim zweiten Mal gibts wohl ein Problem:

2017.11.12 11:33:00 3: DEBUG OZW672: *** Script starting ***

2017.11.12 11:33:00 3: DEBUG OZW672: {

"SessionId": "b6234b32-76e5-4fa9-bd7c-8257a947106e",

    "Result": {
"Success": "true"
    }
}


2017.11.12 11:33:00 3: DEBUG OZW672: true

2017.11.12 11:33:00 3: P: 1
2017.11.12 11:33:00 3: DEBUG OZW672: {
"Data":
{

"Type": "Numeric",
"Value": "        9.3",
"Unit": "°C"

},
    "Result":
{
"Success": "true"
    }
}


2017.11.12 11:33:00 3: DEBUG OZW672: true

2017.11.12 11:33:00 3: DEBUG OZW672: aussen=9.3

2017.11.12 11:33:00 1: ERROR evaluating {OZW672_queryValuesCallback('boiler|[[\'886\',\'aussen\',\'9.3\'],[]]')}: Not an ARRAY reference at fhem.pl line 4311.


Mach ich etwas falsch? Danke vorab!

Konrad

gestein

Hallo Hulzer,

ich verwende das Modul immer noch um meine synco OZW772 auszulesen. Funktioniert.
Danke dafür.

Zum ersten Mal gab es einen Ausfall des OZW772 und es kamen keine Werte mehr.
Dabei ist mir aufgefallen, dass es im log zwar den folgenden Eintrag gibt:
malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "Can't connect to 192...") at ./FHEM/99_OZW672.pm line 259.

Aber der Status des Devices ist immer "ok".

Wäre es möglich, den Status im Fehlerfall zu ändern (z.B. "offline")?

Danke im Voraus
lg, Gerhard

gestein

Falls es mal wer braucht.
Ich habe mir jetzt ein Presence-Device angelegt, und setze den Status des OZW auf den gleichen Wert.

defmod presenceSynco PRESENCE lan-ping 192.168.0.xxx 300
attr presenceSynco devStateIcon present:it_nas@green absent:it_nas@red disabled:it_nas@orange
attr presenceSynco room Zentrale
attr presenceSynco userReadings test:presence.* {my $tst=ReadingsVal('presenceSynco','presence','absent');; fhem("setreading OZW772 state $tst");; return $tst;;}


Und im OZW:
attr OZW772 devStateIcon present:it_nas@green absent:it_nas@red disabled:it_nas@orange

lg, Gerhard

apollon9

Kann es sein, dass man für den set-Befehl noch eine Zeile hinzufügen muss, damit es funktioniert?
Bei mir gings erst, nachdem ich in

sub OZW672_Undef($$)
noch eine
   BlockingKill($hash->{helper}{RUNNING_SET_PID}) if(defined($hash->{helper}{RUNNING_SET_PID}));

hinzugefügt habe (zusätzlich zur vorhandenen BlockingKill Zeile auf RUNNING_GET_PID).

Nur falls das noch jemand benutzt..