msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

ToM_ToM

ZitatUndefined subroutine &main;;telegramBotGetRoomTemperateListMessage called at (eval 1532) line 1

Das ist eine Funktion die bei mir in der Utils aufgerufen wird und einen Text zusammenbaut der mir die aktuellen Werte sowie die Sollwerte aller Räume wiedergibt.
Ersetz die Zeile einfach durch:

"Tempereaturen"

VG
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ErzGabriel

Ahhh, das erklärt es. Wärst Du so freundlich und würdest den Code hier posten? Dann kann ich sie bei mir eintragen.

ErzGabriel

Ich habe gerade ein kleines Problem mit einem weiteren Dialog.
Er funktioniert nur bis zur Auswahl Gerät einschalten oder Gerät ausschalten, danach geht es nicht weiter.
Kriege aber keinen Fehler angezeigt, deswegen komme ich nicht weiter, ein Zeichenfehler ist es nicht, sieht genauso aus, wie ein funktionierender Dialog bei mir. Habe so einen Dialog noch für meine Terras gebastelt und der funktioniert, ergo schließe ich aus, das es an den Steckdosen liegt.
Schaut Ihr doch mal bitte drauf, vielleicht übersehe ich was.
defmod geraete_Dialog msgDialog {"Geräte":{\
  "message": [\
    "(Geräte einschalten) ",\
    "(Geräte ausschalten) ",\
    "(zurück) ",\
    "(abbrechen) ",\
    "Geräte schalten:"\
  ],\
    "Gerät einschalten":{\
    "message":[\
      "{return('(Spüle einschalten) ') if(ReadingsVal('SPUELE', 'state', '') eq 'off')}",\
      "{return('(Büroventilator einschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmer TV einschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') eq 'off')}",\
      "{return('(Wohnzimmerventilator einschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') eq 'off')}",\
      "{return('(Ladegerät einschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') eq 'off')}",\
      "{return('(Schlafzimmer TV einschalten) ') if(ReadingsVal('TV_BED', 'state', '') eq 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll eingeschaltet werden?"\
    ],\
    "Spüle einschalten":{\
    "commands": "set SPUELE on",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde eingeschaltet."\
    ]\
    },\
    "Büroventilator einschalten":{\
    "commands": "set VENT_BUERO on",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmer TV einschalten":{\
    "commands": "set TV_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde eingeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator einschalten":{\
    "commands": "set VENT_WOHN on",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde eingeschaltet."\
    ]\
},\
"LAdegerät einschalten":{\
    "commands": "set PLUG_BED on",\
    "message":[\
      "(%me%) ",\
      "Ladegerät wurde eingeschaltet."\
    ]\
},\
"Schlafzimmer TV einschalten":{\
    "commands": "set TV_BED on",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde eingeschaltet."\
    ]\
}\
    },\
"Gerät ausschalten":{\
    "message":[\
      "{return('(Spüle ausschalten) ') if(ReadingsVal('SPUELE', 'state', '') ne 'off')}",\
      "{return('(Büroventilator ausschalten) ') if(ReadingsVal('VENT_BUERO', 'state', '') ne 'off')}",\
      "{return('(Wohnzimmer TV ausschalten) ') if(ReadingsVal('TV_WOHN', 'state', '') ne 'off')}",\
      "{return('(Wohnzimmerventilator ausschalten) ') if(ReadingsVal('VENT_WOHN', 'state', '') ne 'off')}",\
      "{return('(Ladegerät ausschalten) ') if(ReadingsVal('PLUG_BED', 'state', '') ne 'off')}",\
      "{return('(Schlafzimmer TV ausschalten) ') if(ReadingsVal('TV_BED', 'state', '') ne 'off')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welches Gerät soll ausgeschaltet werden?"\
    ],\
    "Spüle ausschalten":{\
    "commands": "set SPUELE off",\
    "message":[\
      "(%me%) ",\
      "Spüle wurde ausgeschaltet."\
    ]\
    },\
    "Büroventilator ausschalten":{\
    "commands": "set VENT_BUERO off",\
    "message":[\
      "(%me%) ",\
      "Büroventilator wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmer TV ausschalten":{\
    "commands": "set TV_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer TV wurde ausgeschaltet."\
    ]\
    },\
    "Wohnzimmerventilator ausschalten":{\
    "commands": "set VENT_WOHN off",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmerventilator wurde ausgeschaltet."\
    ]\
    },\
    "Ladegerät ausschalten":{\
    "commands": "set PLUG_BED off",\
    "message":[\
      "(%me%) ",\
      "LAdegerät wurde ausgeschaltet."\
    ]\
    },\
    "Schlafzimmer TV ausschalten":{\
    "commands": "set TV_BED off",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer TV wurde ausgeschaltet."\
    ]\
    }\
   }\
}\
}
attr geraete_Dialog allowed rr_Marcus
attr geraete_Dialog room Telegram

ToM_ToM

ZitatAhhh, das erklärt es. Wärst Du so freundlich und würdest den Code hier posten? Dann kann ich sie bei mir eintragen.


######## Status der Raumtemperaturen abfragen ############
sub
telegramBotGetRoomTemperatureListMessage()
{
my $tempArbeitszimmer = ReadingsVal("HM_0815", "measured-temp", "0");
my $desiredTempArbeitszimmer = ReadingsVal("HM_0815", "desired-temp", "0");
my $tempBadezimmer = ReadingsVal("HM_0816", "measured-temp", "0");
my $desiredTempBadezimmer = ReadingsVal("HM_0816", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("HM_0817", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("HM_0817", "desired-temp", "0");
my $returnMessage = "Arbeitszimmer: $tempArbeitszimmer °C (-> $desiredTempArbeitszimmer °C)\n";
$returnMessage .= "Badezimmer: $tempBadezimmer °C (-> $desiredTempBadezimmer °C)\n";
$returnMessage .= "Wohnzimmer: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";

return $returnMessage;
}
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ErzGabriel


igami

Zitat von: ErzGabriel am 16 Februar 2018, 16:30:22
Ich habe gerade ein kleines Problem mit einem weiteren Dialog.
Er funktioniert nur bis zur Auswahl Gerät einschalten oder Gerät ausschalten, danach geht es nicht weiter.
Kriege aber keinen Fehler angezeigt, deswegen komme ich nicht weiter, ein Zeichenfehler ist es nicht, sieht genauso aus, wie ein funktionierender Dialog bei mir. Habe so einen Dialog noch für meine Terras gebastelt und der funktioniert, ergo schließe ich aus, das es an den Steckdosen liegt.
"Geräte" ne "Gerät"
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

ErzGabriel

Jo, da lag der Fehler. Wie peinlich, ein blödes e zu übersehen. Danke Dir.

robertPI

Hallo,

vielen Dank für dieses tolle Modul! Ich versuche mich gerade an einem Menü für meine Beleuchtung, genauer an einer Funktion in 99_myUtils.pm die mir die Anzahl der eingeschalteten Lampen ermittelt. Die Gesamtzahl erhalte ich mit
sub telegramBotGetLightListMessage() {
my @a=devspec2array("NAME=...di.*|...sw.*:FILTER=TYPE=HUEDevice:FILTER=STATE!=off");; my $count=($defs{$a[0]} && $#a+1 || 0);

my $returnMessage = "Insgesamt $count Lampen eingeschaltet\n";
$returnMessage .= "Flur: \n";
$returnMessage .= "Küche: \n";
$returnMessage .= "Schlafzimmer: \n";
$returnMessage .= "Wohnzimmer:";

return $returnMessage;
}


Meine Lampen sind nach dem Muster <Raum>.<di oder sw>.<irgend ein Name> bezeichnet. Wie kann ich die Funktion oben umbauen, um wahlweise (über einen Parameter) die Gesamtzahl oder die Zahl für fl = Flur, ku = Küche, sz = Schlafzimmer, wz = Wohnzimmer zu erhalten?

Der Dialog dazu schaut - schamlos geklaut bei TomTom und ErzGabriel - bisher so aus:
{
"Beleuchtung": {
"match": "Beleuchtung",
"message": [
"(Flur|Küche) ", "(Schlafzimmer|Wohnzimmer) ", "(alle aus) ",
"TelegramBot_MTYPE=queryInline (%me%) ",
"{return telegramBotGetLightListMessage() }"
],
        "Alle": {
            "match":"(alle aus)",
            "commands": ["set NAME=...di.*|...sw.*:FILTER=TYPE=HUEDevice:FILTER=STATE!=off off"],
            "message": ["TelegramBot_MTYPE=queryInline (%me%) ",
                        "Alle Lampen ausgeschaltet"]
        },

"Raum": {
"match": "(Flur|Küche|Schlafzimmer|Wohnzimmer)",
"commands": "setreading $SELF $recipient_Room $message",
"message": [ ",
"(abbrechen) ",
"Beleuchtung in $message einstellen"
],
"Temperatur": {
"match": "on|off|[0-2][0-9][:.]([0]|[5])",
"commands": [],
"message": []
}
}
  }
}


Vielen Dank,
Robert
FHEM auf Raspbery Pi 4
HM: HM-CFG-USB-2,HM-CC-RT-DN,HM-TC-IT-WM-W-EU,HM-SEC-SCo,HM-ES-PMSw1-Pl,HM-Sen-MDIR-WM55 | Philips hue: LCT001,LWL001,FLS-PP lp | Logitech Harmony Ultimate | zigbee2mqtt: WSDCGQ01LM, WSDCGQ11LM, MFKZQ01LM, MCCGQ11LM

Smarti

Hallo,

bin fleißig am mitlesen.

Ich hätte aktuell eine Frage, mit welchen ich nicht weiter komm:

1. Zum einen funktionieren die Ersetzung wenn ich von inline auf "normal" umschalte z.B. "23°C:23.0"  oder "zurück: %me%", nicht als Button. also wird mir genau so angezeigt. Ist das normal?


igami

Ja, das ist normal, nur inline Keyboards können anderen Text senden als darstellen.
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

ToM_ToM

ZitatJa, das ist normal, nur inline Keyboards können anderen Text senden als darstellen.
Das kann ich so nicht bestätigen. Bei mir wurde der Text auch so mit Inline-Keyboards angezeigt.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

Ich vermute wir reden aneinander vorbei. Bitte eine Problembeschreibung mit Bild.
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

ToM_ToM

ZitatIch vermute wir reden aneinander vorbei. Bitte eine Problembeschreibung mit Bild.

Ich hatte doch mal meinen Temperaturdialog. Den hatte ich damals nach einem Beispiel von dir aufgebaut indem du die Temperaturen irgendwie in folgendem Format hattest:
25°C:25
Und genau dieses 25°C:25 wurde mir dann auch so als Button in Telegram angezeigt.

Leider finde ich das Beispiel von damals nicht mehr.

VG, Thomas
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

igami

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

ToM_ToM

ZitatAls inline oder normales Keyboard?
Ist es nicht INLINE sobald ich die Buttons habe?
Dann habe ich wohl doch etwas falsch verstanden.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8