FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: amthenia am 24 September 2017, 08:15:59

Titel: Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 24 September 2017, 08:15:59
Hi,

Ich muss einen Temperaturwert vom Bus lesen und ihn wieder auf den Bus schreiben aber ohne Nachkommastellen.
Die Temperatur kommt auf KNX_1400007 raus (KNX_1400007 KNX 14/0/7:dpt9.001)

Kann mir jemand sagen wie ich das machen müsste? Danke!

UPDATE: https://forum.fhem.de/index.php/topic,77063.msg692897.html#msg692897
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 12:38:42
define Feuchtigkeit_H2_EG KNX 99/9/9:dpt7.001
attr Feuchtigkeit_H2_EG IODev KNXROUTER1
attr Feuchtigkeit_H2_EG room Test
define Feuchtigkeit_H2_EG_notify notify KNX:KNX_1401001.F set Feuchtigkeit_H2_EG value $EVTPART1


Das wäre meine Idee gewesen.
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 12:59:27
define Feuchtigkeit_H2_EG KNX 99/9/9:dpt7.001
attr Feuchtigkeit_H2_EG IODev KNXROUTER1
attr Feuchtigkeit_H2_EG room Test
define Feuchtigkeit_H2_EG_notify notify KNX_1401001:f-get:.* set Feuchtigkeit_H2_EG value KNX_1401001:f-get:.*


Das geht schon fast, aber wie bekomme ich hin das er den Value als Wert nimmt ? Momentan kommt da bei mir immer 14010 an.
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: Frank_Huber am 24 September 2017, 13:57:29
Schau mal in den event monitor. Denke du musst "nur" einen anderen evtpart nehmen.
Oder anstatt evtpart mit perl ReadingsNum arbeiten.

Gesendet von meinem S3_32 mit Tapatalk

Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 14:02:31
Ich caste es jetzt vorher noch auf int, nix geht
KNX_1401001:f-get:.* set Feuchtigkeit_H2_EG value {int(fhem("ReadingsVal('KNX_1401001','f-get','0')"));}
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: MadMax-FHEM am 24 September 2017, 14:15:15
Statt ReadingsVal (wie bereits vorgeschlagen) ReadingsNum nehmen und das "int-Zeugs" weg...

EDIT: also praktisch mal versuchen was geraten wird oder weiterhin selber rumprobieren (das geht auch ohne Forum)...

Gruß, Joachim
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 14:24:08
KNX_1401001:f-get:.* set Feuchtigkeit_H2_EG value ReadingsNum('KNX_1401001','f-get',0, 0)
Was ist denn überhaupt richtig, brauch ich {} ?

Ihr müsst euch vorstellen, ich muss das Gerät immer anhauchen damit sich der Wert ändert !
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: MadMax-FHEM am 24 September 2017, 14:30:00
ReadingsNum ist eine Perlfunktion (in/aus/von fhem), also wohl ja...

Lass mal das value weg und mach die geschweiften Klammern hin...

Grad nur Handy, daher kurze Antwort...

Gruß, Joachim
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: MadMax-FHEM am 24 September 2017, 14:32:17
Das Notify triggert aber!?

Also die Regex passt!?

Gruß, Joachim
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 14:34:59
KNX_1401001:f-get:.* set Feuchtigkeit_H2_EG value {2} das hier wenn ich ausführe dann kommt korrekt 2 raus.
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 14:42:08
Interessant ist doch auch das mein Gerät 1401001 heisst und jeweils der wert auf 14010 gesetzt wird.
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: MadMax-FHEM am 24 September 2017, 15:25:19
ReadingsNum wie auch ReadingsVal hat nur 3 Parameter:

Gerät, Reading, Defaultwert

Gerät: von welchem Gerät
Reading: soll dieses Reading/Wert abgefragt werden
Defaultwert: wird zurück gegeben, wenn der Wert nicht gelesen werden konnte

EDIT: mal nachlesen wie das geht. Das Reading "f-get" existiert und enthält den gewünschten Wert?!

Gruß, Joachim
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 15:36:05
Ich habe gerade einen Tipp bekommen, ich soll es oben in FHEM Befehlszeile eingeben:
{int(ReadingsNum("KNX_1401001","f-get",0))}
bringt mir einen super Wert. z.B. 42

geb ich {42}
kommt auch 42 raus.

Aber in meinem set value geht es nicht

Log sagt:
2017.09.24 15:44:13 3 : check value: input-value {int(ReadingsNum("KNX_1401001"."f-get".0))} was casted to 14010
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 16:55:45
Ich habe mal das dpt auf 16 gestellt und geschaut was er eigentlich ausspuckt.
Ab ReadingsNum, nimmt er ab Num es wörtlich, also interpretiert (?) den Code.
Man darf da nur ne Variable übergeben. Oder?
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: MadMax-FHEM am 24 September 2017, 17:02:05
Warun machst du nicht was dir geraten wird...
...wenn du einfach nur rum probieren willst: bitte!

Du musst aber dann auch nicht alles hier dokumentieren...

Sorry, dass ich grad nur Smartphone hab...

Einfach nach dem set Gerätename {ReadingsNum("GerätenameWoDuLesenWillst", "ReadingnameWasDuLesenWillst", Defaultwert)}

Bei ReadingsNum kommt ja bereits eine Zahl...

Was kommt denn, wenn du nur:

{ReadingsNum("GerätenameWoDuLesenWillst", "ReadingnameWasDuLesenWillst", Defaultwert)}

In die fhem-Web-Zeile eingibst?

Gruß, Joachim
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 24 September 2017, 17:14:22
KNX_1401001:f-get:.* set Feuchtigkeit_H2_EG raw $EVTPART1
Das macht genau was ich will, warum die Kommastellen weg sind, weiß ich nicht.

Ja Joachim da hast du recht - mit allem.
Das was du schreibst geht, aber man kann es nicht nach raw oder value übergeben (korrigiert mich wenn ich falsch liege)

Ich weiß nicht warum ich das so dokumentiert habe, ich wollte einfach Hilfe, und nicht das der Thread unter geht.
Ich muss jetzt überlegen was man daraus für den nächsten wie mich dokumentieren kann, damit der nicht den selben Thread aufmacht.

Danke Joachim für deine Hilfe!
Im Endeffekt muss man EVTPART mehr dokumentieren, das hätte ich sofort mehr benutzt wenn ich es verstanden hätte.
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: MadMax-FHEM am 24 September 2017, 17:19:35
Wenn's geht is gut...

Bin mir zwar noch nicht genau sicher was du genau (also in Summe) wolltest aber nicht (mehr) so wichtig...

Der Titel des Threads ist ja auch "eigenartig" denn event-on-change-reading hat mit Wertumwandlung nichts zu tun...

Viel Spaß noch, Joachim
Titel: Antw:event-on-change-reading Wertumwandlung
Beitrag von: amthenia am 01 Oktober 2017, 18:37:03
Hilfe, ich bin immer noch auf der Suche nach dem optimalsten Weg, wie ich 23,99 in 23 wieder auf den Bus schreibe.
Diesmal wollte ich es in Readings reinschreiben.
Die Andere Methode ist zu unübersichtlich bei 4 Wohnungen.
Help!

i = ist (temp)
s = soll (temp)
v = ventil
co2 = co2
f = feuchtigkeit



define H2EG KNX 14/0/1:dpt9.001:i 14/0/2:dpt9.001:s 14/0/12:dpt9.001:v 14/1/1:dpt9.008:co2 14/1/2:dpt9.007:f
attr H2EG IODev KNXROUTER2
attr H2EG group CO2
attr H2EG room Test
attr H2EG stateFormat i: i-get, s: s-get, v: v-get, co2: co2-get f: f-get

define H2EG_F FileLog ./log/H2EG_F-%Y.log H2EG
attr H2EG_F logtype text

define H2EG_INT KNX 99/9/1:dpt3:i 99/9/2:dpt7:s 99/9/3:dpt7:v 99/8/4:dpt7:co2 99/9/5:dpt1:f
attr H2EG_INT IODev KNXROUTER2
attr H2EG_INT room Test
attr H2EG_INT stateFormat i: i-get, s: s-get, v: v-get, co2: co2-get f: f-get

define H2EG_notify_i notify H2EG:i-get:.* setReading H2EG_INT i-get $EVTPART1
attr H2EG_notify_i addStateEvent 1
define H2EG_notify_s notify H2EG:s-get:.* setReading H2EG_INT s-get $EVTPART1
attr H2EG_notify_s addStateEvent 1
define H2EG_notify_v notify H2EG:v-get:.* setReading H2EG_INT v-get $EVTPART1
attr H2EG_notify_v addStateEvent 1
define H2EG_notify_co2 notify H2EG:.* setReading H2EG_INT co2-get $EVTPART0
attr H2EG_notify_co2 addStateEvent 1
define H2EG_notify_f notify H2EG:f-get:.* setReading H2EG_INT f-get $EVTPART1
attr H2EG_notify_f addStateEvent 1
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 18:48:40
https://perldoc.perl.org/functions/sprintf.html

https://www.tu-chemnitz.de/docs/perldoc/functions/sprintf.html
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 19:36:09
H2EG:.* setReading H2EG_INT co2-get {sprintf("%u",$EVTPART0)}
:( geht nicht.
{sprintf("%u",42.12)}
aber so ginge auch
int(42.12)
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 19:48:45
Also bei mir geht das super
{sprintf("%u",42.12)}
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 19:58:09
Ja schon
ich kann so den Wert nicht umwandeln.

Wie würdest du denn diese Zeile schreiben?
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:04:51
Es steht im Web:
H2EG_INT
i: 24.12, s: 21.00, v: 0.00, co2: {sprintf("%u",592.00)}, f: 47.52 on off

Er schreibt nur die Variable $EVTPART0 korrekt auf 592.00 den rest nimmt er wörtlich
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:06:00
Huch jetzt sehe ich erst was Du da verzapft hast.

{ fhem("setreading H2EG_INT co2-get " . sprintf("%u",$EVTPART0); }
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:10:02
Wo schreib ich das jetzt hin ?
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:12:26
define H2EG_notify_co2 notify H2EG:co2-get:.* setReading H2EG_INT co2-get {fhem(sprintf('%u',$EVTPART1))}\
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:14:58

H2EG:.* { fhem("setReading H2EG_INT co2-get " . sprintf("%u",$EVTPART0)); }
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:20:03
H2EG:co2-get.* { fhem("setReading H2EG_INT co2-get " . sprintf("%u",$EVTPART1)); }
Hinter H2EG_INT liegt eine eigene Gruppenadresse, das schreibt der doch jetzt hoffentlich auf den Bus oder ?
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:22:17
Er macht das was da steht
setReading H2EG_INT co2-get 21
Das kommt dann als Befehl an. Als Beispiel
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:23:51
Wobei dein setReading sicherlich setreading heißen soll. Also eigentlich schreibt er ein Reading und nicht auf einen Bus. Aber ich weiß nicht was da noch bei dir dahinter steckt
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:28:54
Ich soll jetzt den Gira Homeserver kaufen, weil man vom Feuchtesensor 42,12 bekommt und die Wärmepumpe aber nur 42 nehmen würde. Ich will diesen Server nicht. Der Wert, die 42 muss die Wärmepumpe sich holen, damit sie kühlen kann im Sommer.
Also muss fhem die 42,12 dankend entgegen nehmen und eine 42 dann wieder auf den Bus senden.
Das versuch ich jetzt schon eine Weile.

Danke für deine Hilfe CoolTux
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:30:18
Geht denn nun das was du wolltest?
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:31:56
ja geht! Aber ich schau jetzt ob das auf dem Bus landet
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:36:10
Im übrigen sollte int() genau das selbe machen wie sprintf

H2EG:.* { fhem("setReading H2EG_INT co2-get " . int($EVTPART0)); }
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:37:41
H2EG:co2-get.* { fhem("setReading H2EG_INT co2-get " . sprintf("%u",round($EVTPART1,0))); }
Das hab ich jetzt, damit es rundet.
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:42:34
Und wieso machst Du alles doppelt und dreifach?

H2EG:co2-get.* { fhem("setReading H2EG_INT co2-get " . round($EVTPART1,0)); }
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:43:40
Ich kann kein Perl! Ich dachte das erwartet jetzt da nen String.
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 20:46:03
Ich empfehle Dir Dich ruhig etwas mit Perl auseinander zu setzen. Dann macht FHEM noch viel viel mehr Spaß  ;D

Nimm meinen letzten Code mit round das klappt super. Ich gehe davon aus das Dein $EVTPART1 eine Zahl ist und kein String!!!
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: amthenia am 01 Oktober 2017, 20:48:48
Das glaub ich dir! Aber hier wird nix auf den Bus geschrieben.
https://forum.fhem.de/index.php/topic,11505.msg75941.html#msg75941
Hier wird dasselbe versucht, aber nicht mit Readings.
Titel: Antw:Wertumwandlung Fließkomma auf Ganzzahl setReading
Beitrag von: CoolTux am 01 Oktober 2017, 21:14:32
Wie genau lautet den der Befehl von Du etwas auf den Bus schreiben willst?
Also wenn Du es in der FHEM Befehlszeile eingeben würdest