Telegram DOIF wird ständig getriggert

Begonnen von z0lt1, 26 Juni 2018, 21:59:33

Vorheriges Thema - Nächstes Thema

z0lt1

Hallo, ich habe folgendes DOIF mit dem ich über den Versand der Nachricht "Heizung Status" über Telegram an meinen ChatBot in FHEM meine Heizungswerte abfrage:
Internals:
   CFGFN     
   DEF        ([ChatBot:msgText] eq "Heizung Status") (set ChatBot message @... Betriebsart: [Gastherme:Betriebsart] \nAußentemp: [Gastherme:Aussentemperatur] \nTempPufferUnten: [temp.Puffer_Unten:temperature] \nRaumSollTemp: [Gastherme:Raumtemperatur_Soll] \nInternePumpe: [Gastherme:Umwaelzpumpe_intern_Status] \nExternePumpe: [Gastherme:Umwaelzpumpe_HK1_M2_Status] \nThermostatBad: [kr_bad.Thermostat_Clima:state] \nThermostatHobby: [kr_hobby.Thermostat_Clima:state])
DOELSE ()
   MODEL      FHEM
   NAME       TelegrammMsg00
   NR         9919
   NTFY_ORDER 50-TelegrammMsg00
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-06-26 21:50:43   Device          ChatBot
     2018-06-26 21:50:43   cmd             1
     2018-06-26 21:50:43   cmd_event       ChatBot
     2018-06-26 21:50:43   cmd_nr          1
     2018-06-26 21:50:43   e_ChatBot_msgText Heizung Status
     2018-06-26 21:50:24   mode            enabled
     2018-06-26 21:50:43   state           cmd_1
   Regex:
   condition:
     0          ReadingValDoIf($hash,'ChatBot','msgText') eq "Heizung Status"
   devices:
     0           ChatBot
     all         ChatBot
   do:
     0:
       0          set ChatBot message @... Betriebsart: [Gastherme:Betriebsart] \nAußentemp: [Gastherme:Aussentemperatur] \nTempPufferUnten: [temp.Puffer_Unten:temperature] \nRaumSollTemp: [Gastherme:Raumtemperatur_Soll] \nInternePumpe: [Gastherme:Umwaelzpumpe_intern_Status] \nExternePumpe: [Gastherme:Umwaelzpumpe_HK1_M2_Status] \nThermostatBad: [kr_bad.Thermostat_Clima:state] \nThermostatHobby: [kr_hobby.Thermostat_Clima:state]
     1:
       0         
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      message @... Brenner der Gastherme wurde gestartet
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   ChatBot
     timerevent message @... Brenner der Gastherme wurde gestartet
     triggerDev ChatBot
     timerevents:
       message @... Brenner der Gastherme wurde gestartet
     timereventsState:
       message @... Brenner der Gastherme wurde gestartet
     triggerEvents:
       message @... Brenner der Gastherme wurde gestartet
     triggerEventsState:
       message @... Brenner der Gastherme wurde gestartet
   internals:
   itimer:
   readings:
     0           ChatBot:msgText
     all         ChatBot:msgText
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       98_Chats


Wenn ich nun irgendeinen Befehl mir aus der Kommandozeile sende wie z.B.
set ChatBot message @... Brenner der Gastherme wurde gestartet
dann wird immer der obere DOIF getriggert. Was ist der Grund?

Otto123

Hi,

ich vermute folgendes:
Dein ChatBot hat ein Reading msgText das enthält den Text "Heizung Status"
Dein DOIF wird getriggert wenn das Gerät ChatBot getriggert wird, egal mit was.
Das das Reading den erforderlichen Wert enthält (Dein Beispiel setzt ja den Status und nicht das Reading) ist die Abfrage war und - bums.

Du solltest den Trigger des DOIF auf Event ändern.
Öffnest Du den Eventmonitor, setzt dieses Befehl in einem anderen Browserfenster ab, markierst den Event und lässt Dein DOIF modifizieren.
setreading ChatBot msgText "Heizung Status")
https://wiki.fhem.de/wiki/Event_monitor

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

z0lt1

#2
Hallo Otto, danke für die schnelle Antwort und für die Erklärung. Langsam kommt Licht ins Dunkel aber nur ein Kleines  ;)

Also wenn ich den setreading-Befehl abgebe taucht im Event folgendes auf :
2018-06-26 23:26:30 DOIF TelegrammMsg00 cmd_nr: 1
2018-06-26 23:26:30 DOIF TelegrammMsg00 cmd: 1
2018-06-26 23:26:30 DOIF TelegrammMsg00 cmd_event: ChatBot
2018-06-26 23:26:30 DOIF TelegrammMsg00 cmd_1
2018-06-26 23:26:30 TelegramBot ChatBot msgText: Heizung Status


Ich verstehe nur noch nicht wie ich mein DOIF jetzt umbauen muss...

Otto123

Moin,

diese Events sind sekundär. Die Events für den setreading Befehl am Chatbot sind die einzig interessanten!
Ich vermute der Event sieht so aus
... ChatBot msgText: Heizung Statusergo musst Du den trigger für Dein DOIF so setzen
([ChatBot:"msgText: Heizung Status"])Er triggert dann auf diesen Inhalt in einem Event für das Gerät ChatBot.

Aber wie gesagt, lies Dir die Beschreibung zum Eventmonitor durch, wähle den richtigen Event aus und lass es machen! Oder probiere das Konstrukt von mir. Und lies Dir die Commandref zu DOIF und die Auslösung durch Events durch.

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

z0lt1

Hallo Otto,

jetzt habe ich es endgültig verstanden!!! Und jetzt funktioniert es auch genau so wie es soll!

Vielen Dank für deine schnelle und kompetente Hilfe!!!  ;)

Beste Grüße
z0lt1