Hallo Miteinander,
wie kriege ich denn ein Reading so umformatiert, dass bei einem dpt5.001 _kein_ Prozentzeichen angehängt wird.
Beim dpt9.001 kann man ja einfach dpt9 nehmen um die Einheit loszuwerden aber wenn ich dpt5 verwende entfällt
die Umrechnung des Wertebereichs 0-255 in 0-100.
die Definition meines FBH Reglers sieht gerade so aus:
defmod KNX_0106003 KNX 1/6/3:dpt9:temp_ist:get 1/6/6:dpt9:temp_soll:get 1/6/17:dpt5:betriebsart:set 1/6/8:dpt5.001:kreis1_ventil:get 1/6/29:dpt5.001:kreis2_ventil:get
attr KNX_0106003 IODev KNX
attr KNX_0106003 alias Wohnzimmer
attr KNX_0106003 group Heizung
attr KNX_0106003 mqttPublish *:topic={"iot/FBH/1OG/WOHNEN/$reading/value"}
attr KNX_0106003 room 1OG,HEIZUNG,KNX
Da ich die Werte richtung MQTT schiebe wäre es zweckmässig Wert und Einheit zu trennen.
Danke & Gruss
Ekkehard
Hi,
readingsChange könnte funktionieren... (siehe Commandref)
in etwa so (ungetested):
define KNX_0106003_rc readingsChange KNX_0106003 kreis2_ventil-get (\d+).* $1
l.g. erwin
Das ist auch ein großer Wunsch von mir... Ich möchte diese eigentlich fast immer "entfernt" haben.
Leider wurde ein eigenes Konstrukt in FHEM dafür zum Trennen der Werte von der Einheit bisher nur diskutiert aber niemals umgesetzt.
Ich habe mir KNX dafür gepatcht und ein "dpt5.001o" ohne Einheit ergänzt, aber das muss ich bei jedem Update nachziehen...
Du könntest alternativ noch per userReadings ohne eigenes Device folgendes machen:
Entweder Elegant (aber ungetestet)
userReadings kreis1_ventilOVZ:kreis1_ventil.* {\
return $eventValue =~ s/\D//g;\
}
oder
userReadings kreis1_ventilOVZ:kreis1_ventil.* {\
return ReadingsNum($device,"kreis1_ventil","");\
}
Ich habe mittlerweile recht viele Readings extra mit Einheit versehen, damit ich mich besser zurechtfinde.
Mit den Konstrukten ReadingsNum und [device:reading:d] (und in perl eignet sich split, weil der Wert meist Leerzeichengetrennt dahinter steht) komme ich ziemlich gut an alle Zahlen ran, die ich brauche.
Ansonsten würd ich auch die UserReadings nehmen.
Grüße,
Stephan
Moinsen!
Für solche Fälle hatte ich vor geraumer Zeit stateCmd eingebaut. Beispiel aus der commandref:
attr wasser_status stateCmd {sprintf("%s", ReadingsVal($name,"status-get",""))}
Bei devices mehr alsveinen Reading/GAD hilft halt stateCmd auch nix.....
Servus,
Vielen Dank für Eure Antworten.
ich hab das jetzt mit dem von erwin vorgeschlagenen readingsChange implementiert.
Das funktioniert gut auch wenn ich es als recht unübersichtlich empfinde, da ein anderes Gerät
jetzt in den Readings rumfurwerkt.
Eigentlich fände ich es besser wenn grundsätzlich Wert und Einheit voneinander getrennt wären.
Aber sowas nachträglich einzubauen bricht halt auch alle Kompatibilität.
Gruss
Ekkehard