Alpha-Version 69_SoftliqCloud - Auslesen von Grünbeck Entkalkern (Cloud)

Begonnen von KernSani, 18 April 2020, 01:33:22

Vorheriges Thema - Nächstes Thema

KernSani

*** Das Modul ist im SVN eingecheckt und über das reguläre Update verfügbar. Weitere Diskussion bitte hier: https://forum.fhem.de/index.php/topic,119939.0.html ***

Hallo zusammen,

hat dann (wieder mal) länger gedauert als geplant... Ich habe eine erste Testversion eines Moduls fertiggestellt, um Grünbeck Entkalker der SD-Serie (Cloud-Anbindung) in FHEM einzubinden. Die angehängte Version läuft bei mir mit einem SD 18 und scheint stabil zu sein, ist aber sicher noch stark verbesserungswürdig. Mutige Tester und Feedback sind sehr willkommen.

Was kann das Ding?   
Es liest (aktuell fix im 1-Stunden-Takt defaultmäßig jede Stunde - steuerbar über Attribut) eine Unmenge von Werten des Entkalkers aus. Die Daten umfassen:
* Stammdaten zum Gerät (Geräte ID, Name, usw...)
* Aktuelle Daten, die man in der App auf der Startseite sieht (Verbrauch der letzten 3 Tage usw...)
* Alle Einstellungen
* Werte, die gestreamt werden, Regenerierungsstatus, aktueller Durchfluss und eine ganze Menge mehr, auch einige die ich in der App noch nicht gefunden habe.
* Parameter (Einstellungen) des Entkalkers ändern (ich habe das noch nicht vollständig getestet, aber es geht mindestens das, was in der App auch geht)
* Manuelle Regenerierung anstossen (Achtung - das geht ohne Warnung direkt los)


Was kann/hat das Ding noch nicht?
* Aktuell wird nur gelesen, in Zukunft werden auch Einstellungen geändert sowie die manuelle Regeneration getriggert werden können.
* Die Readings sind sehr unübersichtlich und bei vielen weiß ich garnicht was sie bedeuten. Da bin ich auf Input angewiesen, mir schwebt vor, dass die Readings 1. in Gruppen (basic, advanced, expert oder so) eingeteilt werden, über ein Attribut wäre dann auswählbar, welche Gruppen man sehen will und 2. sprechendere Namen für die Readings zu finden.
* Einstellbares Intervall zum Datenabruf
* Passwort verschlüsselt ablegen
* Commandref   
* elegantes Coding ;-)

Wie funktioniert es?
Die folgenden Libraries müssen vorhanden sein:
MIME::Base64::URLSafe
Digest::SHA
JSON::XSEine Perl JSON library
Protocol::WebSocket::Client

Achtung: Das Modul setzt auf der relativ neuen DevIo Websocket Funktionalität von FHEM auf, d.h. FHEM muss auf aktuellem Stand sein (ca. 07.06.2020)

dann
define <name> SoftliqCloud <loginName>

Danach ist das Passwort mit
set <name> password <password>
zu setzen,

Damit sollte das Ding loslaufen...

Get Befehle:
* authenticate: Braucht man im Normalfall nicht, beim Testen hatte ich allerdings Fälle, wo ich mich neu authorisieren musste
* query: holt alle Daten
* realtime: triggert das "streaming" (entspricht mehr oder weniger dem refresh Button in der App)
* salt/water: zeigt die Salz-/Wasser-Verbrauchshistorie an (vergleichbar mit einem Click auf die 3-Tages-Werte in der App). Ich habe den Entkalker erst seit Mitte März und bekomme die gesamte Hostorie, keine Ahnung wie das aussieht wenn der Entkalker schon länger in Betrieb ist)
* paramList: Zeigt die Einstellungen "schön" an

Set Befehle:
* regenerate: manuelle Regeneration (ohne Nachfrage - geht direkt los)
* param: erlaubt das setzen von Einstellungen (siehe paramList) in der Form
set meineSoftliq <parameterName> <parameterWert>
* refill: Auszuführen wenn Salz nachgefüllt wurde. Dadurch wird das Reading lastRefill mit dem aktuellen Wert des readings msaltusage gefüllt und regelmäßig der Salzverbrauch seit dem letzten Auffülen in saltUsageSinceRefill getrackt.
* password: EInmalig auszuführen, um das Passwort im sicheren Speicher zu setzen.

Änderungen:
25.03.2021: Anpassung an geänderte Grünbeck-API
07.05.: Set Refill, sicherere Passwort-Speicherung, Code Optimierungen
30.04.:
* Cleanup und besseres Errorhandling
* Attribut sq_duplex um bei Duplex-Maschinen auch die auf 2 endenden Readings zu bekommen
22.04.:
* Neue Set-Befehle regenerate und param
* neuer Get-Befehl paramList
* Attribut sq_interval
* Attribut disable
* Änderung der "realtime" Logik. Es besteht jetzt eine dauerhafte Websocket Connection ("realtime" zu triggern ist aber trotzdem noch notwendig, von sich aus scheint die Cloud nichts zu schicken ;-))



Wie gesagt, Feedback, Anregungen usw... sind sehr willkommen!





 
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Gehört eigentlich nicht hier her so wirklich aber ich wollte aus Interesse denn noch mal fragen.
Funktion aus der main rufst Du übe den Packagekontext auf. Hast aber GP_Import aktiv. Wieso importierst Du nicht die Funktionen und arbeitest dann mit den direkten Funktionsnamen?
Ist für mich nur so von Interesse.

Vielen Dank


Grüße
Marko
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Zitat von: CoolTux am 18 April 2020, 15:57:46
Gehört eigentlich nicht hier her so wirklich aber ich wollte aus Interesse denn noch mal fragen.
Funktion aus der main rufst Du übe den Packagekontext auf. Hast aber GP_Import aktiv. Wieso importierst Du nicht die Funktionen und arbeitest dann mit den direkten Funktionsnamen?
Ist für mich nur so von Interesse.

Vielen Dank


Grüße
Marko
Hat keinen besonderen Grund. Hatte mit main:: angefangen, wollte dann import machen, hatte dann keine Lust die main:: zu ändern usw... Über den code muss ich sowieso nochmal komplett drüber, dann kommt auch import ;-)


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Roger

Hi KernSani,
ich habe auch eine Grünbeck SQ18 und habe gern Dein Modul runtergeladen.
Ich musste MIME::Base64::URLSafe und Protocol::WebSocket::Client nachinstallieren.
Aber ohne apptime vorher zu aktivieren läuft es nicht --> Absturz. Soll das so bleiben?

Aber mit apptime konnte ich es laden und es hat viele Werte ausgelesen und in Readings gespeichert.
Die muss ich mir noch genauer anschauen.

Mit dankendem Gruss
Roger
Zotac, BBB, RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly

KernSani

Zitat von: Roger am 18 April 2020, 22:20:37
Hi KernSani,
ich habe auch eine Grünbeck SQ18 und habe gern Dein Modul runtergeladen.
Ich musste MIME::Base64::URLSafe und Protocol::WebSocket::Client nachinstallieren.
Aber ohne apptime vorher zu aktivieren läuft es nicht --> Absturz. Soll das so bleiben?

Aber mit apptime konnte ich es laden und es hat viele Werte ausgelesen und in Readings gespeichert.
Die muss ich mir noch genauer anschauen.

Mit dankendem Gruss
Roger
Hi Roger,
Danke für's erste testen... Das mit apptime finde ich sehr irritierend. Kannst du mir sagen, was die letzte Meldung im Log war, vor dem Absturz?
Danke,
Oli


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Roger

Hi Oli,
hier sind die letzten zeilen vom Log:

2020.04.18 21:57:08.002 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at /usr/lipo/fhem/FHEM/69_SoftliqCloud.pm line 181.
2020.04.18 21:57:08.002 1: ================>>>>>>>>>>>
Undefined subroutine &main::svref_2object called at /usr/lipo/fhem/FHEM/69_SoftliqCloud.pm line 937.


//Roger
Zotac, BBB, RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly

KernSani

Oh shit, alles klar. Wird gefixt (und vieles weiteres ;-))


Gesendet von iPhone mit Tapatalk
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Roger

Hier mal meine Sammlung der Reading, welche ich den Daten aus der App zuordnen konnte.
Die Werte, welche ich aus der App noch nicht zuordnen könnte, habe ich mit ? gekennzeichnet.

# Einstellungen Allgemein
serialNumber      ## Seriennummer
softwareVersion  ## Software-Version
hardwareVersion ## Hardware-Version
?        ## Anlagentyp
timeZone           ## Zeitzone (Zeitdifferenz +-hh:mm)
?        ## automatische Umschaltung Winter-/Sommerzeit


# Einstellungen Signale
.pbuzzer     ## Audiosignal bei Stoerungen (1=aktiv)
.pbuzzfrom ## Audiosignal freigeben ab  (Uhrzeit)
.pbuzzto     ## Audiosignal freigeben bis (Uhrzeit)
.pallowpushnotification           ## Push-Benachrichtigung
.pallowemail           ## E-Mail-Benachrichtigung


# Einstellungen Wasser
?           ## Haerteeinheit ev .phunit (Wert=1)
rawWater ## Rohwasserhaerte


# Einstellungen Arbeitsweise
?           ## Arbeitsweise (Eco/Comfort/Power)


# Einstellungen Regeneration
?           ## Regererationszeitpunkt


# Einstellungen Service
lastService ## letzte Wartung (am Datum)
mmaint     ## naechste Wartung (in nnn Tagen)


# Produktinfos:
?           ## Meldungen
mmaint           ## naechste Wartung (in nnn Tagen)
?           ## aktueller Durchfluss (in cbm/h)
?           ## Arbeitsweise (Eco/Comfort/Power)


# Produktinfos: aktuelle Werte
rawWater        ## Rohwasserhaerte
softWater        ## Weichwasserhaerte
water_0_date  ## Datum 0 (fuer Weichwasserverbrauch)
water_0_value ## Weichwasserverbrauch (Liter zum Datum 0)
water_1_date  ## Datum 1 (fuer Weichwasserverbrauch)
water_1_value ## Weichwasserverbrauch (Liter zum Datum 1)
water_2_date  ## Datum 2 (fuer Weichwasserverbrauch)
water_2_value ## Weichwasserverbrauch (Liter zum Datum 2)
mrescapa1       ## Restkapazitaet (in cbm)
nextRegeneration ## naechste Regeneration (Zeitpunkt)
salt_0_date   ## Datum 0 (fuer Salzverbrauch)
salt_0_value  ## Salzverbrauch (Gramm zum Datum 0)
salt_1_date   ## Datum 1 (fuer Salzverbrauch)
salt_1_value  ## Salzverbrauch (Gramm zum Datum 1)
salt_2_date   ## Datum 2 (fuer Salzverbrauch)
salt_2_value  ## Salzverbrauch (Gramm zum Datum 2)



//Roger
Zotac, BBB, RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly

Sascha_F

Hi zusammen,

ggf. ne blöde Frage, aber ist "JSON::XS" = "Cpanel::JSON::XS".

Frage nur, da ich mit den Libraries nicht wirklich firm bin und die Installation gern über "Installer" mache - dieser hat mir jedoch nur "MIME::Base64::URLSafe" und "Protocol::WebSocket::Client" angezeigt.


Mit den Einstellungen zum Abfrageintervall soll man wohl vorsichtig umgehen. Zu viele Anfragen mag der Server wohl nicht, meine ich beim ioBroker-Adapter gelesen zu haben. Per Attribut einstellbar ist aber natürlich super!


Einen leichten Knoten habe ich auch noch bei den Readings zu "water" und "salt" im Kopf:

Heute ist als Beispiel salt_0 der Wert von gestern - morgen ist salt_1 dieser Wert von gestern. Wie bekomme ich denn die beiden Readings "salt_0_date" und "salt_0_value" gemeinsam in ein Reading für die Datenbank?

Wenn ich salt_1 und salt_2 ignoriere, muss ich mir ja keine Gedanken um diese Readings machen - ich lese immer nur "0" ein und baue damit ja eine historie auf.

Falls ich da nen zu großen Knoten im Hirn habe, gern her mit der Info^^ Irgendwie muss ich doch xxx_0_date und xxx_0_value als ein Reading in DBLOG bekommen, oder?

Viele Grüße
Sascha

KernSani

Zitat von: Sascha_F am 20 April 2020, 16:56:49
ggf. ne blöde Frage, aber ist "JSON::XS" = "Cpanel::JSON::XS".

Frage nur, da ich mit den Libraries nicht wirklich firm bin und die Installation gern über "Installer" mache - dieser hat mir jedoch nur "MIME::Base64::URLSafe" und "Protocol::WebSocket::Client" angezeigt.
Cpanel:: ist ein fork von JSON::XS - in der nächsten Version werde ich versuchen auch andere JSON Libraries zu nutzen, aber aktuell geht nur JSON::XS


ZitatMit den Einstellungen zum Abfrageintervall soll man wohl vorsichtig umgehen. Zu viele Anfragen mag der Server wohl nicht, meine ich beim ioBroker-Adapter gelesen zu haben. Per Attribut einstellbar ist aber natürlich super!
Habe ich auch gesehen... und ich hatte beim testen auch ein paar komische Effekte... muss man wahrscheinlich ausprobieren... 1h sollte aber kein Problem sein.


ZitatHeute ist als Beispiel salt_0 der Wert von gestern - morgen ist salt_1 dieser Wert von gestern. Wie bekomme ich denn die beiden Readings "salt_0_date" und "salt_0_value" gemeinsam in ein Reading für die Datenbank?

Wenn ich salt_1 und salt_2 ignoriere, muss ich mir ja keine Gedanken um diese Readings machen - ich lese immer nur "0" ein und baue damit ja eine historie auf.

Falls ich da nen zu großen Knoten im Hirn habe, gern her mit der Info^^ Irgendwie muss ich doch xxx_0_date und xxx_0_value als ein Reading in DBLOG bekommen, oder?

Ich glaube, das sinnvollste wäre es xxx_0_value am Ende des Tages per addLog ins Log zu schreiben. 
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Zitat von: Roger am 20 April 2020, 11:21:29
Hier mal meine Sammlung der Reading, welche ich den Daten aus der App zuordnen konnte:
Vielen Dank. Ich werde in der nächsten Version die ganzen Einstellungen (also die readings mit p.*) nicht mehr als reading darstellen (nur als "hidden" readings) und eine Get-Funktion breitstellen, die die Einstellungen aufbereitet. Setzen der Einstellungen funktioniert auch schon. Kommt wahrscheinlich heute Abend.


RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Roger

Hi,
habe meinen Beitrag #8 um die noch nicht zugeordneten Werte aus der App ergänzt. Bei ? fehlt mir aktuell noch eine Zuordnung zu einem Reading.

//Roger
Zotac, BBB, RPIs mit 10*FHEM
2*HM-LAN, 2*JeeLink, 2*RS485, SignalESP
HomeMatic, PCA301 Komponenten, ModBus: Stromzähler, Fronius WR, Shelly

KernSani

Ich habe am ersten Post angehängte Version aktualisiert. Freue mich auf Anregungen und Feedback.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Sascha_F

Hi zusammen,

@Kern-Sani: Das Modul läuft bei mir jetzt. Habe aktuell "Cpanel::JSON::XS" und nicht JSON::XS".

Möglichkeit 1: Du hast schon Anpassungen vorgenommen
Möglichkeit 2: es läuft out-of-the-box mit dem fork
Möglichkeit 3: mir ist nur noch nicht aufgefallen, dass etwas nicht rund läuft  ;D

Edit: Hab vergessen ins Log zu schauen und natürlich auch, nen Auszug dranzuhängen...


2020.04.25 10:10:39 1: [SD18] Calling connect on client...
2020.04.25 10:10:39 1: [SD18] Successfully connected to service!
2020.04.25 10:10:39 3: SD18 device opened
2020.04.25 10:10:39 1: PERL WARNING: Use of uninitialized value $error in concatenation (.) or string at ./FHEM/69_SoftliqCloud.pm line 1679.
2020.04.25 10:10:39 1: [SD18] - error while connecting to Websocket:
2020.04.25 11:09:16 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/69_SoftliqCloud.pm line 1117.
2020.04.25 11:10:36 3: [SD18]: Starting Timer



@Roger: ich habe mal versucht zu ergänzen - hoffe, nicht am Ziel vorbei ;-) Ansonsten natürlich gern einfach eine kurze Info.

Zitat von: Roger am 20 April 2020, 11:21:29
Hier mal meine Sammlung der Reading, welche ich den Daten aus der App zuordnen konnte.
Die Werte, welche ich aus der App noch nicht zuordnen könnte, habe ich mit ? gekennzeichnet.

# Einstellungen Allgemein
serialNumber      ## Seriennummer
softwareVersion  ## Software-Version
hardwareVersion ## Hardware-Version
?        ## Anlagentyp
timeZone           ## Zeitzone (Zeitdifferenz +-hh:mm)
?        ## automatische Umschaltung Winter-/Sommerzeit


# Einstellungen Signale
.pbuzzer     ## Audiosignal bei Stoerungen (1=aktiv)
.pbuzzfrom ## Audiosignal freigeben ab  (Uhrzeit)
.pbuzzto     ## Audiosignal freigeben bis (Uhrzeit)
.pallowpushnotification           ## Push-Benachrichtigung
.pallowemail           ## E-Mail-Benachrichtigung


# Einstellungen Wasser
phunit ## Haerteeinheit (zumindest ist hier "°dh" enthalten)
rawWater ## Rohwasserhaerte


# Einstellungen Arbeitsweise
?           ## Arbeitsweise (Eco/Comfort/Power)


# Einstellungen Service
lastService ## letzte Wartung (am Datum)
mmaint     ## naechste Wartung (in nnn Tagen)


# Einstellungen Regeneration
?           ## Regererationszeitpunkt


# Einstellungen Service
lastService ## letzte Wartung
mmaint ## naechste Wartung (in nnn Tagen)


# Produktinfos:
?           ## Meldungen
mmaint  ## naechste Wartung (in nnn Tagen)
?           ## aktueller Durchfluss (in cbm/h)
?           ## Arbeitsweise (Eco/Comfort/Power)


# Produktinfos: aktuelle Werte
rawWater        ## Rohwasserhaerte
softWater        ## Weichwasserhaerte
water_0_date  ## Datum 0 (fuer Weichwasserverbrauch)
water_0_value ## Weichwasserverbrauch (Liter zum Datum 0)
water_1_date  ## Datum 1 (fuer Weichwasserverbrauch)
water_1_value ## Weichwasserverbrauch (Liter zum Datum 1)
water_2_date  ## Datum 2 (fuer Weichwasserverbrauch)
water_2_value ## Weichwasserverbrauch (Liter zum Datum 2)
mrescapa1 ## Restkapazitaet (in cbm) (allerdings gibt es auch "mrescapa2", welches ich als Angabe bei Duplex interpretiert hätte. Allerdings steht hier bei mir auch ein Wert - leicht geringer als in mrescapa1.)
nextRegeneration ## naechste Regeneration (Zeitpunkt)
salt_0_date   ## Datum 0 (fuer Salzverbrauch)
salt_0_value  ## Salzverbrauch (Gramm zum Datum 0)
salt_1_date   ## Datum 1 (fuer Salzverbrauch)
salt_1_value  ## Salzverbrauch (Gramm zum Datum 1)
salt_2_date   ## Datum 2 (fuer Salzverbrauch)
salt_2_value  ## Salzverbrauch (Gramm zum Datum 2)



//Roger


Viele Grüße
Sascha