Hallo zusammen,
mich würde mal interessieren, wie ihr das mit den DPT-Untervarianten handhabt.
Wenn ich z.B. einen Temperatursensor habe, kann ich den als dpt9.001 definieren und bekomme dann den Wert als nn.nn °C angezeigt. Sieht zwar nett aus, kann aber nicht direkt für numerische Vergleiche, Berechnungen etc. z.B. in DOIF oder notify, ... verwendet werden da es sich bei 1.25 °C ja um einen String handelt:
defmod di_Frostalarm DOIF ([Temp_aussen:tempNord] <2) (set status_Frostalarm true)
Alternative: ich verwende dpt9 und erhalte nur den numerischen Wert 1.25 . Damit kann ich schön rechnen/vergleichen, muss ihn aber für die Anzeige noch um °C erweitern.
Also muss ich entweder bei der Anzeige die Einheiten hinzufügen oder bei Berechnungen die Einheiten wegfiltern - wie löst ihr das elegant?
Doif hat ein flag um dir Zahl als solche zu extrahieren. Ziemlich einfach damit.
Das Dilemma bleibt.
Es gab mal ein Projekt zum separieren der Einheit, aber das ist gestorben.
Sg Joe
Hi,
du kannst nur den numerischen Teil für deine zwecke nutzen. Du kannst es so ganz einfach machen: ([Temp_aussen:tempNord:d] <2)
Ich habe nur in deinem Beispiel von oben das ":d" ergänzt. Hatte a´das selbe Problem.
Gruß
Porsti
Hallo ihr beiden,
danke für die Antwort - klingt vielversprechend. Leider tut es in meinem Fall noch nicht so, wie es soll.
Im DOIF kriege ich eine Warnung:
warning
condition c01: Argument "" isn't numeric in numeric lt (<)
Die Definition des DOIF:
defmod di_Frostalarm DOIF ([Temp_aussen:tempNord:d] < 2) (set status_Frostalarm true) DOELSE (set status_Frostalarm false)
und hier das KNX-Device:
defmod Temp_aussen KNX 4/1/91:dpt9.001:tempNord 6/4/1:dpt9.001:tempHuette
Ich hab mir noch ein paar Threads zu der Warnmeldung durchgelesen, kann aber beim besten Willen keinen Fehler feststellen :-[
Ein "list" von Temp_aussen beim Problem wäre besser, um die Readings zu sehen. Vermutlich kommt irgendwann gar keine Nummer im Reading.
Danke - das war's!
Die Meldung kam, wenn ich beim Device "checkall" ausgeführt hab. Allerdings ließ sich die Temperatur nicht auslesen, sondern wurde nur zyklisch gesendet.