Modbus Daten auslesen und verstehen (BWWP Ecodesign ED 300 WT)

Begonnen von Mellowback, 27 Februar 2025, 22:51:59

Vorheriges Thema - Nächstes Thema

Mellowback

irgendwie komme ich nicht weiter.
Sollte ich vielleicht einen Dummy erstellen und darüber das ganze steuern ?
Aber wie definiere ich den Dummy?
Und wie kann ich es so darstellen das ich nicht die zahlen 1,2,3,4,5 auswählen muss ?

Wzut

was war denn an dem verlinkten Wiki so unklar ?
Du brauchst dir doch nur ein Stück aus dem Code dort kopieren, z.b. als Radio Buttons :

define testwidget1 dummy
attr testwidget1 eventMap aus:0 WP:1 elektrisch:2 WP_elektrisch:3 Boiler:4 WP_Boiler:5
attr testwidget1 setList state:uzsuSelectRadio,aus,WP,elektrisch,WP_elektrisch,Boiler,WP_Boiler
attr testwidget1 webCmd state
attr testwidget1 widgetOverride setList

oder als DropDown :
define testwidget2 dummy
attr testwidget2 eventMap aus:0 WP:1 elektrisch:2 WP_elektrisch:3 Boiler:4 WP_Boiler:5
attr testwidget setList state:uzsuDropDown,aus,WP,elektrisch,WP_elektrisch,Boiler,WP_Boiler
attr testwidget2 webCmd state
attr testwidget2 widgetOverride setList

und zu guter letzt noch ein notify das auf die Änderungen reagiert und dein Modbus Register setzt :
define testwidget_notify_1 notify testwidget.:.* {fhem("setreading RS485_BWWP H_pump $EVTPART0");}

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Mellowback

beim notify bekomme ich folgenden Fehler:

Missing right curly or square bracket at (eval 51036) line 1, at end of line
syntax error at (eval 51036) line 1, at EOF

Mellowback

habs mit folgenden Befehl versucht, allerdings setzt er nicht die Zahl beim ModBus

define WarmWasserSpeicher_notify_1 notify WarmWasserSpeicher.:.* { fhem "setreading RS485_BWWP H_pump $EVTPART0"}

Wzut

Du must dich mehr mit den FHEM Grundlagen beschäftigen !
Ich hatte in meinem notify testwidget.:.* damit es auf das erste und zweite Beispiel triggert.
Du hast daraus WarmWasserSpeicher.:.* gemacht , hast aber mit Sicherheit nur einen WarmWasserSpeicher Dummy ?!?
Ergo nicht WarmWasserSpeicher.:.* sondern WarmWasserSpeicher:.*
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Mellowback

Klasse, das war es. Jetzt funktioniert es. Ja ich muss mal wieder mein Wissen etwas auffrischen.

fz55

#36
Ich denke es geht auch ohne Dummy und Notify:

attr RS485_BWWP obj-h12-set 1
attr RS485_BWWP obj-h12-map 0:Off, 1:Only HP, 2:Only EL, 3:HP + EL, 4:Boiler, 5:HP + Boiler

Wzut

Zitat von: Mellowback am 08 März 2025, 19:01:12beim notify bekomme ich folgenden Fehler:

Missing right curly or square bracket at (eval 51036) line 1, at end of line
syntax error at (eval 51036) line 1, at EOF
ja wenn man es "am Stück" direkt in der Kommandozeile eingibt muss das Semikolon am Ende verdoppelt werden ...
define testwidget_notify_1 notify testwidget.:.* {fhem("setreading RS485_BWWP H_pump $EVTPART0");;}

@fz55, IMHO sorgt das obj-h12-map im ModbusAttr Device "nur" dafür das beim auslesen des Registers im Reading der betreffende Text steht statt der nackten Zahl.
Dem TE ging es aber doch um :
a. eine "schöne" Eingabemöglichkeit in FHEMWEB zu zu haben , und
b. Text statt Zahl als Eingabe zu haben
und wie wird ohne notify dem ModbusAttr klar gemacht das es jetzt das Register beschreiben soll ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

fz55

@Wzut
Das Mapping funktioniert in beide Richtungen und durch "attr RS485_BWWP obj-h12-set 1" wird in FHEM ein Feld zum Setzen des Wertes (in Verbindung mit -map als DropDown) eingeblendet.

Hier die Dokus dazu:
  • obj-[cdih][0-9]+-map
    In master mode defines a map to convert raw values read from an external device to more convenient strings that are then stored in Fhem readings or back (as reversed map) when a value to write has to be converted from the user set value to a raw value that can be written.
    In slave mode defines a map to convert raw values received from an external device with a write function code to more convenient strings that are then stored in Fhem readings
    or back (as reversed map) when a value to read has to be converted from the Fhem reading value to a raw value that can be sent back as response.
    Example: attr MBTest obj-h225-map 0:mittig, 1:oberhalb, 2:unterhalb
  • obj-[cdih][0-9]+-set
    if set to 1 then this data object (e.g. obj-h225) can be changed with a Fhem set command which results in a modbus write request sent to the external slave device.
    (works only if this device is a modbus master and for holding registers and coils since discrete inputs and input registers can not be modified by definition).

TE kann ja mal die beiden Attribute setzen und schauen, ob das seine Erwartungen erfüllt.

Mellowback

funktioniert nicht ganz da jetzt beim dummy die zahl gesetzt wird.
das nimmt aber der RS485_BWWP nicht an.
Am liebsten würde ich den dummy raus nehmen wenn ich noch im RS485_BWWP ein dropdown Menü hätte.
Geht denn sowas ?

Wzut

Zitat von: fz55 am 09 März 2025, 11:46:26durch "attr RS485_BWWP obj-h12-set 1" wird in FHEM ein Feld zum Setzen des Wertes (in Verbindung mit -map als DropDown) eingeblendet.
ahh stimmt, wieder was gelernt :) Cool ist auch das man gar kein setreading mehr brauch da das dann alles als reines set Kommando geht.

Zitat von: Mellowback am 09 März 2025, 12:17:25im RS485_BWWP ein dropdown Menü hätte.
Geht denn sowas ?

wo machen wie es fz55 geschrieben hat und zusätzlich attr webcmd auf deinen h12 Register-Reading Namen setzen !
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Mellowback

#41
sollte das webcmd so aussehen ?

attr RS485_BWWP obj-h12-webcmd uzsuDropDown ,0:Off, 1:Only HP, 2:Only EL, 3:HP + EL, 4:Boiler, 5:HP + Boiler

Wzut

nein , nein
Zitat von: Wzut am 09 März 2025, 13:10:15attr webcmd auf deinen h12 Register-Reading Namen setzen !

webcmd ist ein FHEMWEB Attribut , schau dir doch bitte die Attribute DropDown Liste an.
Und ohne den dummy wird es wohl auch nichts mit dem uzsu Style und du wirst mit den FHEMWEB Bordmitteln Designs zufrieden sein müssen.

attr RS485_BWWP webcmd H_pump
nach wie vor alles ungetestet da bei mir zwar viel ausgelesen wird aber kein einziges Register beschrieben.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Mellowback

#43
passt, so funktioniert es.
Was mir jetzt aufgefallen ist, das er im "stateFormat" bei der Temperatur Beispiel bei 50.5°C folgendes ausgibt: 50.WP_elektrisch, °C
Wahrscheinlich wegen dem eventMap 0:aus, 1:WP, 2:elektrisch, 3:WP_elektrisch, 4:OelHeizung, 5:WP_OelHeizung
habe jetzt mal eventMap gelöscht.


des Weiteren möchte ich gerne auf der Adresse 16 noch den aktuellen Status auslesen, allerdings steht da beim Hersteller Binar als Unit drin mit dem Hinweis: Status (Für die Übersetzung von Datenbits ist es erforderlich, dass externe Geräte über diese Funktionsoption verfügen.)

Wzut

Dein stateFormat bzw. deine komische Anzeige kann ich überhaupt nicht nachvollziehen, es wäre sinnvoll wenn du einfach mal ein richtiges list bzw. copy for forum.fhem.de zeigen würdest, sonst ist das alles nur Kaffeesatz Leserei.

Definiere doch einfach das i16 Register und schau was da ankommt. Allerdings sagt deine Hersteller Doku ja nichts darüber aus was die einzelen Bits dann für eine Bedeutung haben. IMHO ist der dann gezeigte Wert recht sinnlos. (genau wie das übernächste i18 Register)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher