Fritz!Dect 200 Reading Temperatur auswerten

Begonnen von hdosw, 26 Dezember 2022, 13:26:46

Vorheriges Thema - Nächstes Thema

hdosw

Hallo,

ich habe eine wahrscheinlich einfach zu lösende Frage. Meine FritzBox 7590 habe ich erfolgreich in fhem integriert. Mit fhem kann ich Dect200 Steckdosen schalten. Diese haben auch einen Temperatursensor und diesen möchte ich verwenden um die Dose bei 10 Grad einzuschalten und bei 15 Grad auszuschalten. Geht das und wenn ja wie?


hdosw

Hallo an alle,

ich habe jetzt nach langem suchen und viel probieren eine Lösung gefunden. Ein notify mit diesem Inhalt:
Gewaechshaus:temperature:.* { my $gwhtemp = ReadingsVal("Gewaechshaus","temperature","") ; $gwhtemp  =~ m/(\d+)(\.)(\d*)/ ; $gwhtemp = "$1.$3" ; if($gwhtemp < 12) { fhem("set Gewaechshaus on") } ; if($gwhtemp > 13) { fhem("set Gewaechshaus off") }}

Gewaechshaus ist meine Fritz Dect200. Und so funktioniert das ganze wunderbar.

Ich wünsche allen einen guten Rutsch und ein erfolgreiches und vor allem gesundes neues Jahr.

juemuc

Hallo hdosw,

du kennst diese Funktion?
ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen.

Damit kannst Du direkt den Wert aus einem Reading auslesen.

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Riscberry V

#3
Hallo hdosw,

du kannst auch mit $EVENTPARTX arbeiten. In diesem Fall wären das:
$EVNTPART0: temperature
$EVNTPART1: <die gemessenen Temperatur>
$EVNTPART2: C
$EVNTPART3: (measured)

Der Code würde dann ungefähr so ausehen:

Gewaechshaus:temperature:.* {
if ($EVTPART1 <= 10.0) {
if ((ReadingsVal("Gewaechshaus", "state", "")) eq "off") {
fhem("set Gewaechshaus on")
}
}
elsif ($EVTPART1 >= 15.0) {
if ((ReadingsVal("Gewaechshaus", "state", "")) eq "on") {
fhem("set Gewaechshaus off")
}
}
}


Die zusätzlichen If-Bedigungen habe ich eingefügt um nur zu schalten wenn auch geschaltet werden muss. Geht allerdings auch gleich als UND-Bedingung (&&) im Ursprünglichen If und Elsif.

hdosw

Hallo Riscberry V,

Deine Lösung gefällt mir sehr und werde diese mal testen. Melde mich wieder wenn ich es geschafft habe.

hdosw

Zitat von: juemuc am 29 Dezember 2022, 14:42:21
Hallo hdosw,

du kennst diese Funktion?
ReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen.

Damit kannst Du direkt den Wert aus einem Reading auslesen.


Hallo Jürgen,

kannte ich nicht und ich danke dir dafür.

Gruß
Dieter

hdosw

Zitat von: Riscberry V am 30 Dezember 2022, 11:57:58

du kannst auch mit $EVENTPARTX arbeiten. In diesem Fall wären das:
$EVNTPART0: temperature
$EVNTPART1: <die gemessenen Temperatur>
$EVNTPART2: C
$EVNTPART3: (measured)

Der Code würde dann ungefähr so ausehen:

Gewaechshaus:temperature:.* {
if ($EVTPART1 <= 10.0) {
if ((ReadingsVal("Gewaechshaus", "state", "")) eq "off") {
fhem("set Gewaechshaus on")
}
}
elsif ($EVTPART1 >= 15.0) {
if ((ReadingsVal("Gewaechshaus", "state", "")) eq "on") {
fhem("set Gewaechshaus off")
}
}
}



Hallo Riscberry V,

habe es getestet und funktioniert wunderbar. Ganz herzlichen Dank dafür.

Gutes neues Jahr wünsch ich.

Gruß
Dieter

Damian

Dir ist bewusst, dass du bei jedem Event deiner Temperatur deine Steckdose schaltest!?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Riscberry V

#8
Zitat von: hdosw am 30 Dezember 2022, 16:27:58
Hallo Riscberry V,

habe es getestet und funktioniert wunderbar. Ganz herzlichen Dank dafür.

Gutes neues Jahr wünsch ich.

Gruß
Dieter


Das freut mich!

Wünsche dir auch ein schönes neues Jahr.

Gruß
Marcel



Zitat von: Damian am 30 Dezember 2022, 16:38:06
Dir ist bewusst, dass du bei jedem Event deiner Temperatur deine Steckdose schaltest!?
Hallo Damian,

bei jedem Event der Temperatur wird das Notify getriggert, das stimmt. Aber schalten sollte es nicht immer. Das sollte ja hierdurch verhindert werden: (?)
if ((ReadingsVal("Gewaechshaus", "state", "")) eq "off") {
fhem("set Gewaechshaus on")
}


Es sollte also nur anschlten wenn Gewaechshaus noch "off" ist, aber nicht wenn es schon "on" ist. Das Gleiche umgekehrt mit ausschalten.

Um das Notify nicht bei jeder Temperaturabfrage zu triggern, sondern nur bei Änderungen, könnte man im Device Gewaechshaus noch das Attribute event-on-change-reading  für temperature setzen.

Damian

ja du hast Recht, durch die if-Abfrage wird das wiederholte Schalten unterbunden. So etwas kann man auch als Einzeiler definieren.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF