WCM-COM nach Mqtt Gateway.

Begonnen von uli69, 19 Mai 2020, 12:06:59

Vorheriges Thema - Nächstes Thema

uli69

Hallo,

nachdem mir das WCM-Modul von Elektrolurch "https://forum.fhem.de/index.php/topic,17718.0.html" jahrelang gute Dienste geleistet hat, habe ich mit diesen Informationen ein Gateway für die WCM-COM nach Mqtt entwickelt. Damit können dann die Informationen nicht nur von FHEM sondern auch von allen Mqtt-fähigen Komponenten genutzt werden. Das Gateway ist in C++ geschrieben. Die erste Entwicklerversion 0.0.1 kann derzeit die Informationen nur lesen. Das Schreiben ist aber noch geplant.

Den Sourcecode gibt es unter https://git.uli-eckhardt.de/?p=WcmToMqtt.git;a=summary -> git clone https://git.uli-eckhardt.de/WcmToMqtt.git.

Tiff1112

Hallo,

vielen Dank für die Mühe. ich bin seit einiger Zeit am testen hab aber nach anfänglichen Problemen mit fehlenden Packages nun ein weitere.. make install wird nicht ausgeführt.
vielleicht habe ich ja etwas übersehen und würde mich über hinweise freuen.

beste Grüße

uli69

Gibt es Fehlermeldungen? Da die Config-Dateien nach /etc kopiert werden braucht "make install" root-rechte.

Tiff1112

Hallo,
anbei:



[smarthome@SmartHomeNG ~/WcmToMqtt/build]$ make install
make: *** Keine Regel, um ,,install" zu erstellen.  Schluss.



Auf blauen dunst manuell kopiert was soweit auch funktioniert. danke.

uli69

Was für eine Distribution nutzt du denn? Und könntest du noch mal den Output von cmake posten?

Tiff1112

Hallo,

ich nutze ein normales raspian (buster)



[smarthome@SmartHomeNG ~/WcmToMqtt/build]$ cmake ..
CMake Warning at CMakeLists.txt:8 (find_package):
  By not providing "FindCatch2.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Catch2", but
  CMake did not find one.

  Could not find a package configuration file provided by "Catch2" with any
  of the following names:

    Catch2Config.cmake
    catch2-config.cmake

  Add the installation prefix of "Catch2" to CMAKE_PREFIX_PATH or set
  "Catch2_DIR" to a directory containing one of the above files.  If "Catch2"
  provides a separate development package or SDK, be sure it has been
  installed.


WARNING,CATCH2 not found, automatic tests ignored
-- Configuring done
-- Generating done
-- Build files have been written to: /home/smarthome/WcmToMqtt/build



bis auf die Warnung IO.
an sich funktioniert es auch nach händischem kopieren, also keine große sache.

Tiff1112

Moin,

eine Sache ist mir noch aufgefallen, wenn ich die Readings anpasse auf einen Weishaupt Öl-Brenner habe ich ein sehr eigenartiges Verhalten der Applikation. trotz korrekter Syntax werden manche werte erst gelesen wenn welche voran oder nachgestellt sind. was kann dafür der grund sein?
Mein Ziel ist es natürlich nur die relevanten Werte zu lesen und die Werte aus der Solaranlage anzupasse da hier die Readings nicht übereinstimmen.

Kann jemand das Verhalten bestätigen oder mir tips zur Fehlersuche geben?

uli69

Hattest du via git clone den Sourcecode geholt? ich hatte eine Fehlkonfiguration im Git-Repository so das nur der initiale Commit geclont wurde. Mache mal ein "git log", falls das nur einen commit enthält, dann bitte noch mal per git pull updaten. Eventuell löst das dann alle deine Probleme.

Git-Web hat natürlich alle commits schön brav angezeigt >:( ::)

Tiff1112

#8
anbei:


[smarthome@SmartHomeNG ~/WcmToMqtt]$ git log
commit c20572fd7ef2a2e8c8ef0b0e61797f20678378e0 (HEAD -> master, tag: 0.0.1, origin/master, origin/HEAD)
Author: Ulrich Eckhardt <uli@uli-eckhardt.de>
Date:   Tue May 19 11:09:05 2020 +0200

    Initial Version
[smarthome@SmartHomeNG ~/WcmToMqtt]$



grüße!

EDIT

Es scheint tatsächlich so zu sein. :) Möglicherweise alle Probleme gelöst. Und ich muss gestehen ich habe schon verzweifelt versucht den code nachzuvollziehen ob ggf. irgendwo einschränkungen zu irgendwelchen adresse sind :D
Die Verwirrung tut mir leid.

Vielen Dank für die Arbeit.

EDIT2 Auf die Idee muss man erst mal kommen das wäre mir im leben nicht eingefallen

EDIT3 Mir sind noch convertierungs"fehler" aufgefallen.
Beispielsweise werden die Erträge der Solaranlage nicht korrekt dargestellt. Wie würde das gelöst?
Gibt es da schon Ansätze?
Ebenso werden zwar die Daten für solar abgefragt aber nicht an den Broker übermittelt.
ich habe die "testgroup" in "solar" umbenannt, das hat aber nicht geholfen.
Gleiches gilt für die Verbrauchsdaten.

Schönen Abend.
Grüße,
Stefan

uli69

Zitat von: Tiff1112 am 10 September 2020, 20:16:29
Mir sind noch convertierungs"fehler" aufgefallen.
Beispielsweise werden die Erträge der Solaranlage nicht korrekt dargestellt. Wie würde das gelöst?
Gibt es da schon Ansätze?
Ich habe leider keine Solaranlage, ich kann das deswegen nicht testen.
Zitat von: Tiff1112
Ebenso werden zwar die Daten für solar abgefragt aber nicht an den Broker übermittelt.
ich habe die "testgroup" in "solar" umbenannt, das hat aber nicht geholfen.
Gleiches gilt für die Verbrauchsdaten.
Die Daten sind mal nach bestem Wissen und Gewissen konvertiert, aber da ich die nie getestet habe, sind die alle abgeschaltet. Zum Einschalten ist in der wcm_data.json jeweils die Zeile "interval" : -1 der entsprechenden Readings zu löschen. In der config.json kannst du dann eine Gruppe solar anlegen (oder testgroup nach solar umbenennen).

Tiff1112

#10
Zitat von: uli69 am 11 September 2020, 16:02:01
Ich habe leider keine Solaranlage, ich kann das deswegen nicht testen. Die Daten sind mal nach bestem Wissen und Gewissen konvertiert, aber da ich die nie getestet habe, sind die alle abgeschaltet. Zum Einschalten ist in der wcm_data.json jeweils die Zeile "interval" : -1 der entsprechenden Readings zu löschen. In der config.json kannst du dann eine Gruppe solar anlegen (oder testgroup nach solar umbenennen).

gern mache ich das mal und würde auch die datei erweitern/anpassen. vielleicht lässt sich das ja noch gemeinsam lösen.
Danke auf jeden Fall für die schnelle Hilfe, das Intervall habe ich glatt übersehen zumal ich anfangs auch noch die initiale  wcm_data.json hatte, diese unterscheidet sich ja doch an einigen stellen.
Ansonten funktioniert alles bis jetzt sehr gut.
Was ich allerdings ein wenig schade finde ist das die Query groups nicht(mehr) an das Präfix angehangen werden. ich dachte ich hätte das in der initial version gesehen. Zur Übersichtlichkeit und strukturierung fände ich das "schöner".


Gibt es noch andere die deine Lösung nutzen?

Schöne Grüße aus dem Harz.
Stefan

uli69

Zitat von: Tiff1112 am 11 September 2020, 16:42:38
gern mache ich das mal und würde auch die datei erweitern/anpassen. vielleicht lässt sich das ja noch gemeinsam lösen.
Erweiterungen nehme ich gerne an  :). Für deine Erweiterungen die spezifisch für die Ölheizung sind solltest du am besten eine neue Gruppe anlegen. Und alle bei allen Readings der Solaranlage die du testen konntest halt die Interval-Zeile löschen. Dann kannst du mir das gerne als Patch schicken, ich baue das dann ein.
Zitat von: Tiff1112
Was ich allerdings ein wenig schade finde ist das die Query groups nicht(mehr) an das Präfix angehangen werden. ich dachte ich hätte das in der initial version gesehen. Zur Übersichtlichkeit und strukturierung fände ich das "schöner".
Mal schauen, eventuell mach ich das konfigurierbar.
Zitat von: Tiff1112
Gibt es noch andere die deine Lösung nutzen?
Das WCM-COM Modul scheint nicht so häufig in Verwendung zu sein, bisher hat sich noch niemand weiteres gemeldet.

Viele Grüße
Uli

Tiff1112

hallo,

das ist eigentlich recht schade. Gerade die Möglichkeit über eine definierte Schnittstelle Daten der Anlagen zu holen erscheint mir doch sicherer als sich direkt auf den ebus zu hängen. aber gut das muss jeder für sich entscheiden.
Ich werde die nächsten Tage die Solardaten testen und die Ölheizungsparameter ergänzen. viele Dinge sind identisch und nur von der Bezeichnung unterschiedlich.

Über die genannten Änderungen würde ich mich sehr freuen ;)

uli69

Zitat von: Tiff1112 am 11 September 2020, 16:42:38
Was ich allerdings ein wenig schade finde ist das die Query groups nicht(mehr) an das Präfix angehangen werden.
Es gib jetzt eine neue Konfigurationsoption "group_in_mqtt_path" in der config.json. Wenn der Parameter auf true gesetzt wird, dann wird die Gruppe wieder an das Präfix angehängt.

Tiff1112

Funktioniert prima und strukturiert die Nachrichten im Broker. Ich persönlich finde das so übersichtlicher. Danke!

schneider.krombach

Hallo,

erstmal ein großes Danke für Deine Mühe.

ich habe vor einiger Zeit auch mal die Lösung von Elektrolurch zum Auslesen meiner Gasbrennwert ausprobiert, hat bei mir aber nicht zuverlässig gearbeitet und daher hab ich das wieder aufgegeben.
Nun durch Zufall Deinen Ansatz gefunden und nach einigen Anlaufschwierigkeiten (fehlende Packages) habe ich es auf einem separatem Raspberry unter Buster installiert.
Hab da aber einige Punkte wo ich nicht wirklich weiter komme.

FHEM läuft bei mir auf einem eigenständigem Server auf Ubuntu, wie binde ich das Gateway dann in FHEM ein?
Das Gateway muss ja auch wissen welche IP die WCM-COM hat, wo trage ich das ein und wie startet man das Gateway?
Hab mit MQTT noch nicht wirklich was gemacht.

Grüße
Thomas
FHEM unter Ubuntu 18.04 in einer virtuelle Hyper-V Maschine auf einem Intel Xeon Server - LaCrosse, IT, HM, 1-Wire, ESP8266, Landroid, Home Connect, FTUI, Solarview

Tiff1112

Moin,

auf der git seite vom Uli Eckhardt (ist schon verlinkt ganz oben. kannst du dir die Doku für die aufrufe ansehen. Ziemlich weit unten findest du Aufrufbeispiele.
zur config:

in der config.json
werden die von dir benötigten Einträge hinterlegt:

"wcmconfig":"/home/smarthome/WTM/wcm_data.json",
"wcmhost":"192.168.40.205",
"mqtt" : {
"host":"127.0.0.1",
"port": 1883,


so schaut es bei mir aus. der MQTT broker läuft bei mir auf dem gleichen Gerät wie das Gateway. Deine FHEM muss also entweder einen eigenen Broker haben welcher bereit steht den du da einträgst oder aber einen Client bereitstellen die sich auf einen Broker verbinden kann. ich nutzer SmarthomeNG, inwiefern das da identisch ist weiß ich nicht.

Grüße
Stefan

schneider.krombach

Hallo Stefan,

vielen Dank für die Infos. Werde die Tage das mal probieren und hier berichten.
Muss mich erstmal in die MQTT Broker Materie einlesen und überlegen wie ich das am sinnvollsten bei mir umsetze.


Grüße
Thomas
FHEM unter Ubuntu 18.04 in einer virtuelle Hyper-V Maschine auf einem Intel Xeon Server - LaCrosse, IT, HM, 1-Wire, ESP8266, Landroid, Home Connect, FTUI, Solarview

uli69

Hi,

zum Start, so sieht meine Config aus. Wenn dann mal alle Values published sind, kann man attr D_HZ autoSubscribeReadings wcm/+/value auskommentieren.

define broker MQTT localhost:1883
attr broker icon mqtt_broker
attr broker last-will retain:1 fhem/connection/status disconnected
attr broker on-connect retain:1 fhem/connection/status connected
attr broker on-disconnect retain:1 fhem/connection/status disconnected

attr D_HZ autoSubscribeReadings wcm/+/value
define D_HZ MQTT_DEVICE
setuuid D_HZ 5ec69152-f33f-5725-5e18-f47eae570f478aac
attr D_HZ IODev broker
attr D_HZ alias Heizung
attr D_HZ devStateIcon Connected:mqtt Failed:mqtt@red
attr D_HZ icon sani_heating
attr D_HZ publishSet_111-Betriebsart Standby Programm-1 Programm-2 Programm-3 Wie-Leitstelle Normal Absenk Sommer \
        wcm/111-Betriebsart/set
attr D_HZ publishSet_501-Reduzierbetrieb Frost Absenk \
        wcm/501-Reduzierbetrieb/set
attr D_HZ room Heizung


Tiff1112

#19
Hallo zusammen,

kann ein neuer String Map eingebaut werden?

"Solar-DTR" :
[
{
"code" : 0,
"text" : "stagnation"
},
{
"code" : 1,
"text" : "kollektor_frostschutz"
},
{
"code" : 2,
"text" : "solarregeler_in_handfunktion"
},
{
"code" : 3,
"text" : "solarregeler_in_notbetrieb"
},
{
"code" : 4,
"text" : "pumpenstandschutz"
},
{
"code" : 5,
"text" : "ref_unterer_ap"
},
{
"code" : 6,
"text" : "ref_kennlinie"
},
{
"code" : 7,
"text" : "keine_sol_energiegew"
},
{
"code" : 8,
"text" : "kein_ertrag"
},
{
"code" : 9,
"text" : "sol_energiegew"
},
{
"code" : 10,
"text" : "sol_ruekkuehlung"
},
{
"code" : 11,
"text" : "kollektorschutz"
},
{
"code" : 12,
"text" : "dtr_sonderphase"
},
{
"code" : 13,
"text" : "stabilisierung"
},
{
"code" : 14,
"text" : "yield"
},
{
"code" : 15,
"text" : "regelung"
}
],


wenn weitere Infos nötig sind gern melden. Ich kann es auch selbst versuchen wenn das nichts aus macht.

PS.: wenn Readings erweitert werden (entfernt oder ergänzt) müssen die Readings 100% passen sonst kann es passieren das ein nachfolgendes Reading nur noch Blödsinn anzeigt. dies passiert u.A auch wenn es ein Reading nicht gibt.
Man kann seine WCM-COM schön analysieren wenn man sich von der SD Karte des Moduls ein abzug macht und sich die einzelnen Forms anschaut. (Nur zur Info)

hier ein Beispiel:

{
"accuracy" : 0.1,
"div" : 1,
"group" : "wcm-sol",
"max" : 15,
"method" : "conv_raw",
"min" : 0,
"mul" : 1,
"name" : "Status-DTR",
"telegram" :
[
[ 3, 0, 1, 753 ]
],
"unit" : "",
"writable" : false
},

Wenn das Reading mit conv_raw anfragt weil es noch keine Übersetzung gibt fliegt das nächste (nächst höhere 753 --> 1670) reading quasi raus und gibt quark zurück. in meinem Fall:

{
"autogen" : 2,
"accuracy" : 0.1,
"div" : 1,
"group" : "wcm-sol",
"max" : 65535,
"method" : "conv_float",
"min" : 0,
"mul" : 1,
"name" : "Tagesertrag",
"telegram" :
[
[ 3, 0, 1, 1670 ]
],
"unit" : "kWh",
"writable" : false
},


Schöne Grüße!

uli69

Was eher wahrscheinlich ist, ist das die Telegramme nicht stimmen, bzw das für einen Wert mehrere Telegramme geschickt werden müssen. Wenn das alles nicht stimmt liefert die WCM-COMM lustige Werte  ???

Tiff1112

Hab dir die Telegramme geschickt.
Was mich irritiert ist das verhalten wenn vor/nach dem Betreffenden reading was eingefügt wird und dann der Fehler auftritt. nimmt man die Änderung raus funktioniert wieder alles problemlos.

Grüße

uli69

Die Stringmap ist mit dem neuen Konverter conv_solar_dtr verfügbar.

Für den Tagesertrag gibt es auch einen neuen Konverter conv_float2 der nur zwei Telegramme erwartet, conv_float habe ich nach conv_float3 umbenannt, damit klar ist das dieser Konverter drei Telegramme benötigt. Die Änderungen sind auf dem Branch "solar" verfügbar.

Eine Prüfung ob die Anzahl der Telegramme in der Definition für ein Reading mit der Anzahl der Telegramme, die der Konverter erwartet übereinstimmt, gibt es nicht. Könnte man zwar einbauen, da bin ich aber zu Faul zu ;)

uli69

Es gibt eine neue Version im git-Repository https://git.uli-eckhardt.de/?p=WcmToMqtt.git;a=summary mit Verbesserungen für Solar und Ölbrenner. Außerdem gibt es jetzt die Möglichkeit die Authentifizierung zu nutzen.

Ich musste allerdings noch mal kräftig am Design drehen damit sich die notwendigen Änderungen mit den bestehenden Konfigurationen vertragen. Die "Reading-Groups" sind jetzt in jeweils eigene *.json Dateien gewandert und man muss in der Config jetzt erst mal die zu ladenden Groups konfigurieren. Deswegen wird jetzt auch beim Start mit der -d Option das Config-Directory benötigt. D.h. der Start erfolgt mit: /usr/local/bin/wcmtomqtt -m -d /etc/wcmtomqtt

Die neuen Argumente in der config.json sind wcmuser, wcmpassword für die Authentifizierung und groups für die zu nutzenden Reading-Groups. Die Gruppe wtc-g ist für Gasbrenner, wtc-o für Ölbrenner. Die beiden Gruppen können nicht zusammen genutzt werden. hk2 sollte nur geladen werden, wenn auch ein zweiter Heizkreis vorhanden ist und wcm-sol nur wenn eine Solaranlage angeschlossen ist.

{
        "wcmhost":"hostname",
        //"wcmuser": "username",
        //"wcmpassword": "password",
        "groups": [
                {"group":"wtc-g"},
                // {"group":"wtc-o"},
                //{"group":"wcm-sol"},
                {"group":"hk1"},
                //{"group":"hk2"},
                {"group":"user"}
        ],
        "mqtt" : {
                "host":"hostname",
                "port": 1883,
                "user": "user",
                "password": "password",
                "interval": 5,
                "retain": false,
                "prefix": "wcm",
                "queryvals": [
                        {"group":"wtc-g", "interval": 3},
                        {"group":"user", "interval": 30}
                ]
        }
}



Tiff1112

Hey vielen Dank,

ich werde es umgehend einbauen und testen.

PS: der conv_int2 hat immer noch die x1000 drin welche mir die Verbrauchswerte fürs öl verhagelt. Konntest du was mit den Telegrammen die ich dir dazu geschickt hatte anfangen?

Grüße!
SL

uli69

Zitat von: Tiff1112 am 28 Dezember 2020, 18:54:42
PS: der conv_int2 hat immer noch die x1000 drin welche mir die Verbrauchswerte fürs öl verhagelt. Konntest du was mit den Telegrammen die ich dir dazu geschickt hatte anfangen?
Ich habe gerade noch mal einen Fix für das Problem eingecheckt. Ich hoffe mal, das es jetzt auch in der Praxis funktioniert ;)

Tiff1112

Ah cool, werde ich testen.
Auch den Rest, leider hab ich es noch nicht geschafft, werde aber bis mitte Januar auf jeden Fall eine Rückmeldung geben.

Guten Rutsch!

b4r7

Vielen Vielen Dank! Ein Docker Container wär grandios!
FHEM auf Debian VM (FreeNAS bhyve)
HMUart + ZME-UZB1 über RPi2/ser2net

uli69

Zitat von: b4r7 am 30 Dezember 2020, 23:24:31
Vielen Vielen Dank! Ein Docker Container wär grandios!
Die Software kompiliert problemlos auf allen halbwegs aktuellen Distributionen und auch problemlos auf meinem Banana Pi R1 :D . Docker ist mir da zu viel Aufwand.

uli69

Es gibt noch mal eine neuere Version 0.9.1 . Damit kann man auch einen Reset der WCM-COM auslösen. Irgendwie möchte meine WCM-COM so ein mal die Woche einen Reset ???

Die WCM-COM kann via MQTT oder Kommandozeile resettet werden. Der Reset via MQTT baut auch die Verbindung zum MQTT-Server kurzzeitg ab. In der json.conf muss die Gruppe system geladen werden:

"groups": [
    {"group":"system"}
    ...


Reset via Kommandozeile
wcmtomqtt -d /etc/wcmtomqtt -s 0,0,251,reset
Achtung, man sollte möglichst keinen Reset über die Kommandozeile auslösen, wenn die MQTT-Abfrage wo anders aktiv ist.

Reset via MQTT
mosquitto_pub ... -t wcm/Reset/set -m reset

Tiff1112

Moin und ein gesundes neues Jahr allen.

Gibt es eigentlich eine Möglichkeit parallelzugriffe zu realisieren auf dem WCM-COM?
falls ich das schonmal gefragt habe... sry :)

b4r7

Hi, weiß jemand ob sich die Zirkulationspumpe per Befehl einschalten und ausschalten lässt?
FHEM auf Debian VM (FreeNAS bhyve)
HMUart + ZME-UZB1 über RPi2/ser2net

Wardancer

Hi,

Soweit ich weiß, geht das nicht direkt. Was man machen kann und was ich auch schon gemacht habe, ist für längere Abwesenheiten den Urlausmodus einzuschalten. Dann fährt die Heizung aber auch in Absenk ( evtl. Frostschutz). Außerdem gibt es dafür nicht einen Befehl, sondern man muss die Daten der Abwesenheit entsprechend verändern.
Ich selber nutze das im Moment so nicht mehr, und würde es vermutlich mittlerweile, wenn ich häufiger schalten wollte, über einen Schaltaktor machen. Für ein häufiges Umschalten ist die Lösung von mir meiner Meinung nach nicht geeignet. Das Umsetzen der Urlaubsdaten wird ja in irgendein EPROM geschrieben, und das wird vermutlich nicht soooo viele Schreibzykles aushalten.

Tiff1112

Hallo,

genau, ich schalte meine pumpe auch über einen Schalt Aktor zeitgesteuert wenn jemand zu hause ist.

beste Grüße

Tiff1112

Hallo,

na dem letzten Erfolgreichen Test nochmal ein Danke, die Applikation funktioniert seit nunmehr 2 Wochen völlig problemlos. Wird der Patch noch nachgepflegt?

grüße
Stefan

uli69

Hallo,

der Patch für den Ölverbrauch ist drin. Ich habe jetzt Version 1.0.0 released. ;)

uli69

Hallo,

es gibt jetzt die Version 1.0.1 . Diese fixt einen Bug wenn man ein Prefix mit einem oder mehreren Shlashes benutzt konnten die Readings nicht geändert werden.

Tiff1112

Super,
Danke für die Info, ich werde die Version im Laufe der nächsten Woche Testen.
Gibt's es in Bezug auf die readings was zu beachten oder bleibt da alles beim alten?

Grüße

uli69

Sollte alles beim alten bleiben. Das ist nur ein Bugfix.

Tiff1112

Hallo,

bis jetzt ist mir nichts negatives aufgefallen. danke für die Arbeit.

Übrigens,
für Leute mit Ölheizung ist die Maps Datei anzupassen der Bereich "HzZustand" ist auf Gasheizungen ausgelegt.

Grüße
SL

Tiff1112

Hallo,

leider finde ich die Dokumentation nicht mehr. Kannst du das ggf. neu verlinken?

Grüße!

uli69

Beim Serverumzug/Update ist die Generierung des READMEs kaputt gegangen. Ich habe das jetzt gefixt (und eine Compiler-Warning in neueren GCCs). Jetzt sollte wieder alles am alten Platz (https://git.uli-eckhardt.de/?p=WcmToMqtt.git;a=summary) sein.