(GELÖST) Telegram Nachricht bei Heizung Ausfall? Mit DoIf?

Begonnen von misux, 13 Februar 2018, 20:53:44

Vorheriges Thema - Nächstes Thema

misux

HI!
Ich bin absoluter Anfänger aber bin immerhin schon soweit das ich mir einen Sensor und den TelegramBot eingerichtet habe...

Nun zu meiner Frage:

Wie müsste ein DoIF Befehl aussehen wenn er mir mit dem TelegramBot eine Nachricht senden soll wenn in Meinen Heizungs Readings unter BasicSet ein Wert 255 steht?

Wäre für einen Tipp sehr Dankbar denn die Ganzen beispiele und Anleitungen auch für if für mich nicht sehr verständlich sind...

Oder ist es besser sowas mit IF oder sogar mit Notify zu machen?

Vielen Dank!

Otto123

Hi,

Du meinst DOIF?
define di_bla DOIF ([Heizungsname:Readingsname] == 255) (Schicke Telegramm)

Ist natürlich mit soviel Infos ausgrüstet die Du geliefert hast.  :D

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

misux

#2
Ja, sorry meine DOIF.

leider bekomme ich diese Fehlermeldung:
ALARM DOIF: expected DOELSEIF or DOELSE: set Telegram _msg ALARM

eingegeben habe ich:

define ALARM DOIF ([SENSOR_1_Heizung:basicset] == 255) set Telegram _msg ALARM

hmm...

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

Otto123

so luschig habe ich mein Beispiel doch nicht verfasst  ::)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Thyraz

Finde den Fehler / Unterschied zu Ottos Pseudocode. ;)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

Damian

Nicht nur als Anfänger, aber insb. als dieser, sollte man sich etwas Zeit zum Lesen lassen: https://fhem.de/commandref_DE.html#DOIF

Nach wenigen Zeilen stößt man dort auf die Syntax des Moduls, die man einfach einhalten muss, sonst kommt man nicht weit.

ZitatSyntax:

define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Thyraz

Und die Klammern bedeuten nicht, dass da was optional ist, sondern die müssen da einfach hin. ;)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

misux

 ::) Hammer... nach vielem hin und her endlich Erfolg!

So muss das besagte aussehen:

([SENSOR_1_Heizung:"255"]) (set Telegram _msg meineNachricht) DOELSE (set Telegram _msg meineNachricht)

Somit sendet mir Telegram eine Nachricht wenn meine Heizung eine Störung hat.

Vielen Dank für eure Hilfe! Manchmal ist es aber echt nicht einfach für einen Leien weil es jedesmal irgendwie anders aussieht...

nils_

warum hast du da jetzt ein DOELSE dazu gepackt?
viele Wege in FHEM es gibt!

CoolTux

Mach das DOELSE weg und dafür das Attribut do always hin.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

misux

Der Heizungssensor hat 2 Werte: 255 und 0.

Das DOELSE sendet mir eine Nachricht wenn der Aktor wieder offen (0) ist das die Heizung wieder OK ist!

DOALWAYS würde theoretisch immer eine Nachricht bei 255 senden, richtig?

Otto123

Zitat von: misux am 14 Februar 2018, 10:12:28
Der Heizungssensor hat 2 Werte: 255 und 0.

Das DOELSE sendet mir eine Nachricht wenn der Aktor wieder offen (0) ist das die Heizung wieder OK ist!

DOALWAYS würde theoretisch immer eine Nachricht bei 255 senden, richtig?
Nö, die Else sendet Dir in deinem jetzigen Konstrukt nie
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

glaube aber nicht das Dein DOIF bei 0 triggert. Du sagst ja explizit das er nur beim Event 255 des Devices SENSOR_1_Heizung triggern soll.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Ich denke mal von der Funktion ist es egal. Er hat einen Eventtrigger. Bei Event 255 wird gesendet. Bei jedem anderen Event wird nicht gesendet und bestenfalls das DOIF zurückgesetzt (da bin ich nicht sicher)

Ich würde do always machen, ich finde die sinnlose Else unlogisch. Aber das ist Ansichtssache.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

misux

Zitatdo always

Ohne do always gilt:Die Befehle eines Bedingungszweiges werden ohne vorherigen Statuswechsel nur einmal ausgeführt.

Das Attribut setzt diese Regel ausser Kraft. Befehle werden wiederholt im bestehenden Status ausgeführt.

Das interne DOELSE entfällt bei DOIF mit einem Zweig.

Wait-Timer werden bei wiederholtem Wahrwerden der Bedingung nicht abgebrochen.

Würde es beuetuen das die ganze Zeit Nachrichten bekomme solange der Wert nicht wieder auf 0 springt?

CoolTux

Zitat von: Otto123 am 14 Februar 2018, 10:19:01
Ich denke mal von der Funktion ist es egal. Er hat einen Eventtrigger. Bei Event 255 wird gesendet. Bei jedem anderen Event wird nicht gesendet und bestenfalls das DOIF zurückgesetzt (da bin ich nicht sicher)

Ich würde do always machen, ich finde die sinnlose Else unlogisch. Aber das ist Ansichtssache.

Gruß Otto

Ist halt die Frage ob er nicht auch informiert werden will wenn die 255 (Fehler) wieder weg ist. Weiß aber nicht ob alle anderen Werte das DOELSE auslösen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Nein, das würde bedeuten das jedesmal wenn der Wert 255 ist eine Meldung kommt.

Du hast gar nichts mit 0 eingebaut!!! Du wartest auf einen Event 255 weiter nichts!

Ich bin nicht sicher, es spielt in Deinem Fall eventuell gar keine Rolle!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Otto123

@CoolTux Ist sein Konstrukt jetzt nicht wie ein notify auf SENSOR_1_Heizung:255 ?

Das löst doch bei 0 auch nicht aus  ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

Zitat von: Otto123 am 14 Februar 2018, 10:33:21
@CoolTux Ist sein Konstrukt jetzt nicht wie ein notify auf SENSOR_1_Heizung:255 ?

Das löst doch bei 0 auch nicht aus  ;)

Genau das war ja mein bedenken. Habe aber so lange nichts mehr mit DOIF gemacht das ich mir unsicher war.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

misux


So, ich habe es jetzt etwas angepasst und die Werte etwas umbenannt der Übersichtlichkeit...

([SENSOR_1_Heizung:"OPEN"]) (set Telegram _msg HEIZUNG AUSGEFALLEN!!!) DOELSE (set Telegram _msg HEIZUNG WIEDER OK!!!)

In diesem Fall bekomme ich immer eine Nachricht bei OPEN "HEIZUNG AUSGEFALLEN" und wenn nicht open "HEIZUNG WIEDER OK!!! Und das ist auch gut so.

Wenn  ich DOELSE lösche dann bekomme ich keine "HEIZUNG WIEDER OK" Nachricht!

Was würde denn jetzt, wenn ich ein "do always", vor allem wohin setze, ändern?

Otto123

Zitat von: misux am 14 Februar 2018, 10:55:41
Was würde denn jetzt, wenn ich ein "do always", vor allem wohin setze, ändern?
Nichts - wenn es so funktioniert ist alles gut.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

misux

 ;D Sehr gut! somit bin ich wieder etwas mehr glücklich das etwas funktioniert.. Bin aber noch verflucht weit weg von "ich habe das System FHEM verstanden"  ::)

Otto123

Ich lege jetzt nochmal für mich und Cooltux nach, weil ich es auch verstehen wollte  :D
([SENSOR_1_Heizung:"OPEN"]) triggert das DOIF bei JEDEM Event von SENSOR_1_Heizung und wertet anschließend nur OPEN aus. Die Bedingung wird also wahr bei OPEN und unwahr (DOELSE) bei allem anderem. Also nicht wie bei einem notify auf SENSOR_1_Heizung:OPEN

(["SENSOR_1_Heizung:OPEN"])triggert das DOIF nur auf OPEN von SENSOR_1_Heizung. Die Bedingung wird wahr bei OPEN und niemals unwahr(Die DOELSE spielt überhaupt keine Rolle).
Ohne do always triggert das nur einmal!
Dies ( aber nur mit attr di_Heizung do always) entspräche damit einem notify und trigger SENSOR_1_Heizung:OPEN (was aber viel einfacher wäre)

Kann man selbst mal mit zwei Dummys und dem DOIF durchspielen:
define di_Heizung DOIF ([Dummy1:"on"]) (set Dummy2 $EVENT) DOELSE (set Dummy2 $EVENT)

@misux Wie schon gesagt alles gut für Dich. Ich wollte es nur versuchen zu erklären. Ich will Dich nicht verwirren.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

Es ist so weit alles richtig, bis auf die Tatsache, dass bei Ereignisangaben im DOIF, im Gegensatz zum Notify, kein ^ für Beginn und $ für Ende drangehängt wird:

"SENSOR_1_Heizung:OPEN"  entspricht beim notify .*SENSOR_1_Heizung.*:.*OPEN.*

dagegen SENSOR_1_Heizung:OPEN beim notify entspricht beim DOIF "^SENSOR_1_Heizung$:^OPEN$"
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: Otto123 am 14 Februar 2018, 11:45:40
([SENSOR_1_Heizung:"OPEN"]) triggert das DOIF bei JEDEM Event von SENSOR_1_Heizung und wertet anschließend nur OPEN aus.

(["SENSOR_1_Heizung:OPEN"])triggert das DOIF nur auf OPEN von SENSOR_1_Heizung. Die Bedingung wird wahr bei OPEN und niemals unwahr(Die DOELSE spielt überhaupt keine Rolle).
Nee, oben triggerst du genau einen Aktor, unten alle, die "SENSOR_1_Heizung" im Namen haben.

Otto123

Per, es ist schnell irreführend zu zitieren und die Zitate zu kürzen und zu zerpflücken. Mein "Gewicht" lag woanders, ausgehend davon: es gibt nur einen SENSOR_1_Heizung.

Deinen Einwand habe ich durch den Beitrag Damian schon verstanden.

Meine Erkenntnis zum Bedingungsteil des DOIF stimmt, wenn es nur einen SENSOR_1_Heizung gibt der auch nur zwei Zustände annimmt.
Das war ja die Aussage vom TE.

Gruß und Danke
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

#27
Hier mal eine Übersicht der möglichen Zustände:

Zustandsabfragen:

([dummy] eq "on") (set lamp on) hat zwei Zustände: cmd_1, cmd_2 (hier ist DOELSE virtuell immer dabei, sonst könnte man nur einmal schalten)

([dummy] eq "on") (set lamp on) mit do always hat nur einen Zustand: cmd_1

([dummy] eq "on") (set lamp on)  DOELSE mit do always  hat zwei Zustände: cmd_1,cmd_2

Ereignisabfragen mit einem konkreten Device (Verhalten wie oben):

([dummy:"on"]) (set lamp on) hat zwei Zustände: cmd_1, cmd_2

([dummy:"on"]) (set lamp on) mit do always hat nur einen Zustand: cmd_1

([dummy:"on"]) (set lamp on) DOELSE mit do always hat zwei Zustande: cmd_1, cmd2

Allgemeine Ereignisabfragen

(["dummy:on"])(set lamp on) hat nur einen Zustand: cmd_1 (ohne do always nicht sinnvoll, da nur eine Schaltung möglich)

(["dummy:on"])(set lamp on) mit do always hat nur einen Zustand: cmd_1

(["dummy:on"])(set lamp on) DOELSE hat nur einen Zustand: cmd_1 (cmd_2 lässt sich nicht provozieren, da es bei jedem Ereignis von irgendwelchen Devices zuschlagen würde)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF