msgDialog: Instant Messaging als FHEM Interface

Begonnen von igami, 30 September 2017, 15:09:01

Vorheriges Thema - Nächstes Thema

sku

Hallo zusammen,

ich hab einen Dialog gebaut, den ich leider weder per RAWimport noch def modify im device ändern kann. Es passiert einfach nix, keine Meldung, kein Logeintrag, auch nicht bei verbose 5 des msgDialog device. Füge ich jedoch den code manuell in die fhem.cfg ein, funktioniert alles Fehlerfrei.

Hier der Code:
{
  "Heizung": {
    "message": [
    "(Heizung Text) ",
    "(Heizung Graph) ",
    "(Heizung Hauptschalter) ",
    "(Heizungsabsenkung) ",
    "(SZ Nachtbetrieb) ",
    "(AZ|Bad) ",
    "(SZ|WZ) ",
    "(zurück:%me%|ende) ",
    "Aktuell Soll - Ist:",
    "AZ:  [az_ThstWand_Climate:desired-temp] - [az_ThstWand_Climate:measured-temp].",
    "Bad: [bad_ThstWand_Climate:desired-temp] - [bad_ThstWand_Climate:measured-temp].",
    "SZ:  [sz_ThstWand_Climate:desired-temp] - [sz_ThstWand_Climate:measured-temp].",
    "WZ:  [wz_ThstWand_Climate:desired-temp] - [wz_ThstWand_Climate:measured-temp].",
"Draußen kälter: [raumdurchschnitt:draussenkaelter]"
    ],
    "Heizung Text": {
      "message": [
        "AZ",
        "[az_Thst1_Clima:state]%",
        "[az_ThstWand_Weather:state]%",
        "Bad",
        "[bad_Thst1_Clima:state]%",
        "[bad_ThstWand_Weather:state]%",
        "SZ",
        "[sz_Thst1_Clima:state]%",
        "[sz_ThstWand_Weather:state]%",
        "WZ",
        "[wz_Thst1_Clima:state]%",
        "[wz_Thst2_Clima:state]%",
        "[wz_ThstWand_Weather:state]%"
      ]
},
    "Heizung Graph": {
      "commands": "set %TelegramBot% cmdSend {plotAsPng('SVG_rasp3_DbLog_Heizung')}",
      "message": "Plot"
},
    "Heizung Hauptschalter": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizung Hauptschalter: [heizung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
 
    },
"Heizungsabsenkung": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizungsabsenkung: [heizungsabsenkung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
"SZ Nachtbetrieb": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"SZ Nachtbetrieb: [sz_nachtbetrieb_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "AZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [az_ThstWand_Climate:measured-temp]",
"Soll: [az_ThstWand_Climate:desired-temp]",
"Tag: [az_ThstWand_Climate:R-dayTemp]",
"Nacht: [az_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set az_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "Bad": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [bad_ThstWand_Climate:measured-temp]",
"Soll: [bad_ThstWand_Climate:desired-temp]",
"Tag: [bad_ThstWand_Climate:R-dayTemp]",
"Nacht: [bad_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set bad_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "SZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [sz_ThstWand_Climate:measured-temp]",
"Soll: [sz_ThstWand_Climate:desired-temp]",
"Tag: [sz_ThstWand_Climate:R-dayTemp]",
"Nacht: [sz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set sz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "WZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [wz_ThstWand_Climate:measured-temp]",
"Soll: [wz_ThstWand_Climate:desired-temp]",
"Tag: [wz_ThstWand_Climate:R-dayTemp]",
"Nacht: [wz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set wz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "ende": {
      "match": "\/?abbrechen",
  "commands": "deletereading TYPE=msgDialog $recipient_history",
      "message": "Pfiat di!"
    }
  }
}

igami

Zitat von: sku am 19 Oktober 2018, 23:47:52
ich hab einen Dialog gebaut, den ich leider weder per RAWimport noch def modify im device ändern kann.
Das spricht ja für ein Fehlverhalten von FHEMWEB.

Zitat von: sku am 19 Oktober 2018, 23:47:52
Es passiert einfach nix, keine Meldung, kein Logeintrag, auch nicht bei verbose 5 des msgDialog device. Füge ich jedoch den code manuell in die fhem.cfg ein, funktioniert alles Fehlerfrei.
Ist denn das allowed Attritbut vergeben?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

binford6000

Moin,
einfach in eine Leere msgDialog Definition einegeben. Läuft.
define test msgDialog {}
Und dann dein Dialog reinkopiert. Kann ihn sofort in Telegram aufrufen.
Vg Sebastian

binford6000

Und wie igami schreibt dass Attribut allowed nicht vergessen.
Ich hab bei mir ein archetype device eingerichtet was das automatisch für mich tut...
VG Sebastian

sku

Vielen Dank für die Antworten, leider war die zündende Idee nicht dabei...
Attribut ist gesetzt.
neues device anlegen und reinkopieren funktioniert bei mir auch nicht, hatte ich schon probiert und jetzt eben wieder.


list, hatte ich vergessen (hier ohne DEF weil das schon weiter oben steht):
   MSGCOMMAND msg push \@$recipients $message
   NAME       Heizung_Dialog
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         228
   NTFY_ORDER 50-Heizung_Dialog
   STATE      rr_michi: Heizung
   TRIGGER    Heizung
   TYPE       msgDialog
   OLDREADINGS:
   READINGS:
     2018-10-20 16:22:38   state           rr_michi: Heizung
Attributes:
   allowed    everyone
   room       msg


list WEB:
Internals:
   CONNECTS   545
   CSRFTOKEN  csrf_633
   DEF        8083 global
   FD         7
   NAME       WEB
   NR         5
   NTFY_ORDER 50-WEB
   PORT       8083
   STATE      Initialized
   TYPE       FHEMWEB
   READINGS:
     2018-10-18 14:29:17   state           Initialized
Attributes:
   JavaScripts codemirror/fhem_codemirror.js pgm2/fhem_details.js
   allowfrom  127.0.0.1
   confirmDelete 1
   editConfig 1
   longpoll   1
   menuEntries fhem-PC,/fhem,fhem-rasp1,/fhem-rasp1
   stylesheetPrefix dark
   title      { if($FW_room) { "rasp3: $FW_room" } elsif($FW_detail) { "rasp3: $FW_detail" } else { "rasp3" } }
   webname    fhem-rasp3


fhemweb hatte ich auch schon im Verdacht, hatte schon probiert die Attr. JavaScripts und title zu entfernen, leider ohne Erfolg.

binford6000

Zitatneues device anlegen und reinkopieren funktioniert bei mir auch nicht, hatte ich schon probiert und jetzt eben wieder.
Kommt da eine Fehlermeldung?

sku

#561
Zitat von: binford6000 am 22 Oktober 2018, 11:01:25
Kommt da eine Fehlermeldung?

nein, keine Meldung, kein Logeintrag...

WEB verbose 5:
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/pgm2/jquery-ui.min.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 GET /fhem-rasp3/pgm2/jquery.min.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/fhemweb.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/pgm2/doif.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56082 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 GET /fhem-rasp3/pgm2/fhemweb_readingsGroup.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56084 => 304 Not Modified
2018.10.22 12:08:22 4: Connection accepted from WEB_192.168.0.123_56088
2018.10.22 12:08:22 4: WEB_192.168.0.210_56088 GET /fhem-rasp3/pgm2/jquery-ui.min.js; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56088 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/darkCommon.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/pgm2/dashboard_darkstyle.css; BUFLEN:0
2018.10.22 12:08:22 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:23 4: WEB_192.168.0.210_56080 GET /fhem-rasp3/images/default/icoEverything.png; BUFLEN:0
2018.10.22 12:08:23 4: WEB_192.168.0.210_56080 => 304 Not Modified
2018.10.22 12:08:23 4: WEB_192.168.0.210_56082 GET /fhem-rasp3/images/default/fhemicon_dark.png; BUFLEN:0
2018.10.22 12:08:23 4: WEB_192.168.0.210_56082 => 304 Not Modified

binford6000

Dein FHEMWEB hat aber nichts mit msgDialog zu tun...  :o
Also zumindest wäre mir dieser Zusammenhang neu...  ;D

binford6000

#563
Dein Dialog frisch angelegt mit:
define test msgDialog {}
dann auf DEF und deinen Dialog eingefügt. Speichern. Keine Fehlermeldung. Einmal in Telegram aufgerufen:


Historie löschen
Internals:
   CFGFN     
   DEF        {
  "Heizung": {
    "message": [
    "(Heizung Text) ",
    "(Heizung Graph) ",
    "(Heizung Hauptschalter) ",
    "(Heizungsabsenkung) ",
    "(SZ Nachtbetrieb) ",
    "(AZ|Bad) ",
    "(SZ|WZ) ",
    "(zurück:%me%|ende) ",
    "Aktuell Soll - Ist:",
    "AZ:  [az_ThstWand_Climate:desired-temp] - [az_ThstWand_Climate:measured-temp].",
    "Bad: [bad_ThstWand_Climate:desired-temp] - [bad_ThstWand_Climate:measured-temp].",
    "SZ:  [sz_ThstWand_Climate:desired-temp] - [sz_ThstWand_Climate:measured-temp].",
    "WZ:  [wz_ThstWand_Climate:desired-temp] - [wz_ThstWand_Climate:measured-temp].",
"Draußen kälter: [raumdurchschnitt:draussenkaelter]"
    ],
    "Heizung Text": {
      "message": [
        "AZ",
        "[az_Thst1_Clima:state]%",
        "[az_ThstWand_Weather:state]%",
        "Bad",
        "[bad_Thst1_Clima:state]%",
        "[bad_ThstWand_Weather:state]%",
        "SZ",
        "[sz_Thst1_Clima:state]%",
        "[sz_ThstWand_Weather:state]%",
        "WZ",
        "[wz_Thst1_Clima:state]%",
        "[wz_Thst2_Clima:state]%",
        "[wz_ThstWand_Weather:state]%"
      ]
},
    "Heizung Graph": {
      "commands": "set %TelegramBot% cmdSend {plotAsPng('SVG_rasp3_DbLog_Heizung')}",
      "message": "Plot"
},
    "Heizung Hauptschalter": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizung Hauptschalter: [heizung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
 
    },
"Heizungsabsenkung": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"Heizungsabsenkung: [heizungsabsenkung_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set heizungsabsenkung_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
"SZ Nachtbetrieb": {
      "message": [
"(einschalten) ",
"(ausschalten) ",
"(zurück|abbrechen) ",
"SZ Nachtbetrieb: [sz_nachtbetrieb_rasp3:state]"
      ],
      "einschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 on",
  "set $SELF say @$recipient Heizung"
        ]
      },
  "ausschalten": {
    "commands": [
  "set sz_nachtbetrieb_rasp3 off",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "AZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [az_ThstWand_Climate:measured-temp]",
"Soll: [az_ThstWand_Climate:desired-temp]",
"Tag: [az_ThstWand_Climate:R-dayTemp]",
"Nacht: [az_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set az_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "Bad": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [bad_ThstWand_Climate:measured-temp]",
"Soll: [bad_ThstWand_Climate:desired-temp]",
"Tag: [bad_ThstWand_Climate:R-dayTemp]",
"Nacht: [bad_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set bad_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "SZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [sz_ThstWand_Climate:measured-temp]",
"Soll: [sz_ThstWand_Climate:desired-temp]",
"Tag: [sz_ThstWand_Climate:R-dayTemp]",
"Nacht: [sz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set sz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "WZ": {
      "message": [
"(zurück|abbrechen) ",
"(19.5°C:19.5|20°C:20.0|20.5°C:20.5|21°C:21.0) ",
"(21.5°C:21.5|22°C:22.0|22.5°C:22.5|23°C:23.0) ",
"(23.5°C:23.5|24°C:24.0|25°C:25.0|26°C:26.0) ",
        "Ist: [wz_ThstWand_Climate:measured-temp]",
"Soll: [wz_ThstWand_Climate:desired-temp]",
"Tag: [wz_ThstWand_Climate:R-dayTemp]",
"Nacht: [wz_ThstWand_Climate:R-nightTemp]"
      ],
      "Setup": {
        "match": "[0-2][0-9][.]([0]|[5])",
        "commands": [
          "{my $temperatur = '$message';;;; fhem(\"set wz_ThstWand_Climate desired-temp $temperatur\");;;;}",
  "set $SELF say @$recipient Heizung"
        ]
      }
    },
    "ende": {
      "match": "\/?abbrechen",
  "commands": "deletereading TYPE=msgDialog $recipient_history",
      "message": "Pfiat di!"
    }
  }
}
   MSGCOMMAND msg push \@$recipients $message
   NAME       test
   NOTIFYDEV  TYPE=(ROOMMATE|GUEST)
   NR         2076
   NTFY_ORDER 50-test
   STATE      rr_Sebastian: Heizung
   TRIGGER    Heizung
   TYPE       msgDialog
   READINGS:
     2018-10-22 13:16:56   rr_Sebastian_history Heizung
     2018-10-22 13:16:56   state           rr_Sebastian: Heizung
Attributes:
   allowed    rr_Sebastian
   group      Dialoge
   icon       dialog
   room       91_Dialogsteuerung


Was mir auffällt: Bei dir fehlt das reading <ROOMMATE>_history -> wird vom Meta-Dialog wieder gelöscht.
Und bei mir gibt es kein OLDREADINGS.

nanocosmos

Da ich nicht das Rad neu erfinden wollte bzw. geringe Kentnisse in Perl habe, wollte ich einen Heizungs Dialog hier aus dem Thread verwenden.
Erstmal danke für die tolle Vorarbeit.

Leider habe ich zwei Fehler:
1. Es wird immer nur mein Büro geschaltet, auch wenn ich als Zimmer beispielsweise Wohnzimmer wähle. Meine sehr rudimentären Kentnisse in Perl haben mir leider nicht weitergeholfen den Fehler zu finden.


{
"1. Heizung": {
"match": "Raumtemperaturen",
"message": [
"(Schlafzimmer) (Bücherzimmer|Wohnzimmer) (Küche|Bad unten) (Büro Daniel|Büro Lisa) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Küche|Schlafzimmer|Wohnzimmer|Büro Daniel|Büro Lisa|Esszimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(10.0|12.0|16.0|17.0) ",
"(17.5|18.0|18.5|19.0) ",
"(19.5|20.0|20.5|21.0) ",
"(21.5|22.0|22.5|23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; my $clima = ($room==\"Büro Daniel\"?\"dz_heizung_Clima\": ($room==\"Esszimmer\"?\"ez_heizung_Clima\":($room==\"Schlafzimmer\"?\"sz_heizung_Clima\":($room==\"Wohnzimmer\"?\"wz_heizung_Clima\":\"\"))));;;; fhem (\"set $clima desired-temp $temp\") }"
],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
  }
}


2. Ich habe, um die aktuellen Temperaturen zu erhalten, die Änderung an der 99myUtils.pm vorgenommen.
Dies klappt auch wunderbar, doch nach 1-2 Tagen erscheint immer die Fehlermeldung:
Undefined subroutine &main:: telegramBotGetRoomTemperatureListMessage called at (eval 4421) line 1.

Wenn ich die 99myUtils öffne und ohne Änderung nochmal speichere, funktioniert es wieder, d.h. die Raumtemperaturen werden geschickt.


sub telegramBotGetRoomTemperatureListMessage()
{
my $tempDaniel = ReadingsVal("dz_heizung_Clima", "measured-temp", "0");
my $desiredTempDaniel = ReadingsVal("dz_heizung_Clima", "desired-temp", "0");
my $tempLisa = ReadingsVal("lz_heizung_Clima", "measured-temp", "0");
my $desiredTempLisa = ReadingsVal("lz_heizung_Clima", "desired-temp", "0");
my $tempBadunten = ReadingsVal("bz_heizung_Clima", "measured-temp", "0");
my $desiredBadunten = ReadingsVal("bz_heizung_Clima", "desired-temp", "0");
my $tempKueche = ReadingsVal("HZ_KUECHE", "measured-temp", "0");
my $desiredTempKueche = ReadingsVal("HZ_KUECHE", "desired-temp", "0");
my $tempSchlafzimmer = ReadingsVal("sz_heizung_Clima", "measured-temp", "0");
my $desiredTempSchlafzimmer = ReadingsVal("sz_heizung_Clima", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("wz_heizung_Clima", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("wz_heizung_Clima", "desired-temp", "0");
my $tempBuecher = ReadingsVal("bz_heizung", "measured-temp", "0");
my $desiredTempBuecher = ReadingsVal("bz_heizung", "desired-temp", "0");
my $tempEsszimmer = ReadingsVal("ez_heizung", "measured-temp", "0");
my $desiredTempEsszimmer = ReadingsVal("ez_heizung", "desired-temp", "0");
my $returnMessage = "- 1. Stock -\n";
$returnMessage .= "Daniel: $tempDaniel °C (-> $desiredTempDaniel °C)\n";
$returnMessage .= "Lisa: $tempLisa °C (-> $desiredTempLisa °C)\n";
$returnMessage .= "Schlafz.: $tempSchlafzimmer °C (-> $desiredTempSchlafzimmer °C)\n";
$returnMessage .= "- Erdgeschoss -\n";
$returnMessage .= "Bad unten: $tempBadunten °C (-> $desiredBadunten °C)\n";
$returnMessage .= "Bücherzimmer: $tempBuecher °C (-> $desiredTempBuecher °C)\n";
$returnMessage .= "Esszimmer: $tempEsszimmer °C (-> $desiredTempEsszimmer °C)\n";
$returnMessage .= "Wohnzimmer: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";


return $returnMessage;
}

binford6000

Hallo,

Zu 1:
my $clima = ($room==\"Büro Daniel\"?\"dz_heizung_Clima\": ($room==\"Esszimmer\"?\"ez_heizung_Clima\":($room==\"Schlafzimmer\"?\"sz_heizung_Clima\":($room==\"Wohnzimmer\"?\"wz_heizung_Clima\":\"\"))));;;;

Der Rest nach "Büro Daniel" wird wohl nicht mehr ausgewertet. Da mein PERL auch noch in Level 2-3 steckt würde ich hier klassisches if/elsif verwenden.
Was ich definitiv besser lesen kann als die Kurzform...  :o

Zu 2:
Das liegt wohl eher nicht an msgDialog. Aber ich probier es einfach nochmal am Wochenende aus.

VG Sebastian

binford6000

Hallo nochmal,
probier mal den hier:
{
"1. Heizung": {
"match": "Raumtemperaturen",
"message": [
"(Schlafzimmer|Büro Daniel) (Esszimmer|Wohnzimmer) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetRoomTemperatureListMessage() }"
],
"Raum": {
"match": "(Esszimmer|Schlafzimmer|Wohnzimmer|Büro Daniel)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [
"(10.0|12.0|16.0|17.0) ",
"(17.5|18.0|18.5|19.0) ",
"(19.5|20.0|20.5|21.0) ",
"(21.5|22.0|22.5|23.0) ",
"(abbrechen) ",
"Heizung im $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [
"{my $temp = $message;;;; my $clima;;;; $temp =~ s/([\\d]{1,2}\\.[\\d{1}])/$1/g;;;; my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; if ($room eq \"Büro Daniel\") {$clima = \"dz_heizung_Clima\";;;;} elsif ($room eq \"Esszimmer\") {$clima = \"ez_heizung_Clima\";;;;} elsif ($room eq \"Schlafzimmer\") {$clima = \"sz_heizung_Clima\";;;;} elsif ($room  eq \"Wohnzimmer\") {$clima = \"wz_heizung_Clima\";;;;} fhem (\"set $clima desired-temp $temp\") }" ],
"message": [
"TelegramBot_MTYPE=queryInline (%me%) ",
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;; return \"Temperatur im $room auf $message eingestellt.\";;;; }"
]
}
}
  }
}


VG Sebastian

nanocosmos


Smarti

#568
Hallo,

ich versuche gerade den Dialog mit der Einkaufsliste zu erweitern, komme aber nicht weiter... meine Perl Kenntnisse sind eher rudimentär, kenne eigentlich eher C.

Dabei der eigentliche Dialog von igami:

Zitat von: igami am 12 Oktober 2017, 20:18:13
[..]
Ich nutze PostMe mit msgDialog, aber ohne TBot_List

defmod Einkaufsliste_Dialog msgDialog { \
  "Einkaufsliste": {\
    "message": [\
      "(Waren hinzufügen) ", \
      "(Waren entfernen) ", \
      "(einkaufen) ", \
      "(abbrechen) ",\
      "{my $content = (split(': ', fhem('get %PostMe% list %list%')))[1];;;; return('Keine Einträge vorhanden') unless($content);;;; return(join('\n', split(',', $content)));;;;}"\
    ],\
    "Waren hinzufügen": {\
      "message": [\
        "Bitte jede Ware als neue Nachricht hinzufügen.",\
        "Das hinzufügen von Waren durch \"/beenden\" beenden."\
      ],\
      "Ware hinzufügen": {\
        "match": "[^/]+",\
        "commands": [\
          "set %PostMe% add %list% $message",\
          "setreading $SELF $recipient_history Einkaufsliste|Waren hinzufügen"\
        ]\
      }\
    },\
    "Waren entfernen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1]), 'beenden'). ') ')}",\
        "Welche Ware möchtest du entfernen?"\
      ],\
      "Ware entfernen": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|Waren entfernen"\
        ]\
      }\
    },\
    "einkaufen": {\
      "commands": [\
        "setreading $SELF $recipient_history Einkaufsliste|noch einzukaufen"\
      ],\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Bitte die Waren der Reihenfolge nach auswählen in der sie eingekauft werden."\
      ]\
    },\
    "noch einzukaufen": {\
      "message": [\
        "{return('(' . join(') (', split(',', (split(': ', fhem('get %PostMe% list %list%')))[1])) . ') ')}",\
        "(beenden) ",\
        "Noch einzukaufen:"\
      ],\
      "Ware eingekauft": {\
        "match": "^(?!beenden).+",\
        "commands": [\
          "set %PostMe% remove %list% $message",\
          "set $SELF say @$recipient Einkaufsliste|noch einzukaufen"\
        ]\
      }\
    }    \
  }\
}
attr Einkaufsliste_Dialog evalSpecials PostMe=PostMe\
list=Einkaufsliste



Ich habe nun eine Erweiterung geschrieben um alle bestehenden Listen auszulesen:


defmod test_Dialog msgDialog {\
  "Listen": {\
    "message": [\
      "{my $content = ReadingsVal('%PostMe%', 'postmeCnt', '');;my $list;; my @a;; for my $i (0..$content) { $list = 'postme'.sprintf('%02i',$i).'Name';; push(@a,ReadingsVal('%PostMe%',$list,''));;};; return('Keine Listen vorhanden') unless(@a);; return (join(',',@a));;}"\
    ]\
}\
}

attr test_Dialog evalSpecials PostMe=PostIt



Nun will / sollten diese vergleichbar wie bei "Ware entfernen" als Buttons zurückgegeben werden, damit dann bei der "Einkaufliste" eingestiegen werden kann.

Kann mir da jemand weiterhelfen...

Bin über Optimierungen in meinem Code auch offen.

THX

l2r

#569
moin zusammen,

hat sich in seit dem Wochenende irgendwas geändert?
Bei mir scheint der msgDialog nicht mehr auf die Trigger zu reagieren. Kann das noch jemand bestätigen?

Außerdem habe ich noch eine Frage:
Ich möchte gerne Pushover als default für msg benutzer und zusätzlich für msgDialog dann Telegram. Ich habe mir also testweise im globalmsg folgendes gesetzt:
attr msgDialog_msgCommand msg \@Telegram:\@$recipients $message
ist das korrekt? Leider bekomme ich keine Antworten auf meine Trigger, egal ob ich das Attribut jetzt setze oder nicht. Aktuell steht msgContactPush wieder auf Telegram. Leider bekomme ich auch hier keine Nachrichten.

EDIT: scheint jetzt wieder zu laufen. Ich hab aber keine Ahnung woran es gelegen hat ;-)

Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.