msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

Wuehler

Hi,

Ein list von LADEGERAET wäre hilfreich. Welchen state hat denn LADEGERAET?

ToM_ToM

Zitat
"Geräte ausschalten":{\

...

"{return('(Büroladegerät ausschalten) ') if(ReadingsVal('LADEGERAET', 'state', '') eq 'off')}",\

Du musst dort 'ne' statt 'eq' verwenden.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ErzGabriel

Das war es, danke Tom_Tom. Copy & Paste Fehler.

netdom

Ich stehe gerade auf dem Schlauch, in meinem MetaDialog ist folgendes definiert:

"zurück": {
    "commands": "set $recipient_history=.+ say @$recipient {(ReadingsVal($DEV, '$recipient_history', '') =~ m/(.+)\\|.+$/;; return($2 ? $2 : $1;;)}"
  },


In meinen Dialogen sieht das dann z.B. so aus

defmod Lichtsteuerung_Dialog msgDialog {\
  "Lichtsteuerung": {\
    "message": [\
   "(Weihnachtsbaum einschalten) ",\
   "(Weihnachtsbaum ausschalten) ",\
   "(Arbeitsplatzlichter einschalten) ",\
   "(Arbeitsplatzlichter ausschalten) ",\
           "(Zurück:%me%) ",\
   "Bitte gewünschtes Licht auswählen"\
    ],\
"Arbeitsplatzlichter einschalten": {\
"commands": ["set HUEDevice7 on", "set az.verteilerdose_Out2 on"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Arbeitsleuchte eingeschaltet"\
]\
}, \
"Arbeitsplatzlichter ausschalten": {\
"commands": ["set HUEDevice7 off", "set az.verteilerdose_Out2 off force"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Arbeitsleuchte ausgeschaltet"\
]\
}, \
"Weihnachtsbaum einschalten": {\
"commands": ["set HUEDevice8 on"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Weihnachtsbaum eingeschaltet"\
]\
}, \
"Weihnachtsbaum ausschalten": {\
"commands": ["set HUEDevice8 off"],\
"message":[\
        "TelegramBot_MTYPE=queryInline (%me%) ",\
"Weihnachtsbaum ausgeschaltet"\
]\
}\
  }\
}



Ich habe schon (zurück) als auch (zurück:%me%) versucht aber er beendet dann einfach, auch mit Groß/Kleinschreibung habe ich es schon versucht, könnt ihr mir einen Tipp geben ?


igami

Du bist auf der Einstiegsebene, wohin soll er denn zurück Springen?
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

Hallo.
Ich habe den Temperatur Dialog von Tom versucht an meine Bedürfnisse anzupassen aber es klappt nicht komplett.
Ich kann alle Heizkörper schalten und das wird auch ausgeführt aber bei der Temperaturauflistung, wird mir nie das Büro angezeigt. Ich verstehe aber nicht warum und deswegen bitte ich Euch um Hilfe.

Der Dialog:
defmod heizungs_Dialog msgDialog {\
"Raumtemperaturen": {\
"match": "Raumtemperaturen",\
"message": [\
"(Büro|Küche) (Schlafzimmer|Wohnzimmer) ",\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{return telegramBotGetRoomTemperatureListMessage() }"\
],\
"Raum": {\
"match": "(Büro|Küche|Schlafzimmer|Wohnzimmer)",\
"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\"?\"HZ_BUERO\": ($room==\"Küche\"?\"HZ_KUECHE\":($room==\"Schlafzimmer\"?\"HZ_BED\":($room==\"Wohnzimmer\"?\"HZ_WOHNZ\":\"\"))));;;;;;;; fhem (\"set $clima desired-temp $temp\") }"\
],\
"message": [\
"TelegramBot_MTYPE=queryInline (%me%) ",\
"{my $room = ReadingsVal(\"$SELF\", \"$recipient_Room\", \"\");;;;;;;; return \"Temperatur im $room auf $message eingestellt.\";;;;;;;; }"\
]\
}\
}\
  }\
}
attr heizungs_Dialog allowed rr_Marcus
attr heizungs_Dialog room Telegram

setstate heizungs_Dialog rr_Marcus: Raumtemperaturen
setstate heizungs_Dialog 2018-03-30 19:07:09 state rr_Marcus: Raumtemperaturen



Die angepasste Subroutine:
######## Status der Raumtemperaturen abfragen ############
sub
telegramBotGetRoomTemperatureListMessage()
{
my $tempBuero = ReadingsVal("HZ_BUERO", "measured-temp", "0");
my $desiredTempBuero = ReadingsVal("HZ_BUERO", "desired-temp", "0");
my $tempKueche = ReadingsVal("HZ_KUECHE", "measured-temp", "0");
my $desiredTempKueche = ReadingsVal("HZ_KUECHE", "desired-temp", "0");
my $tempSchlafzimmer = ReadingsVal("HZ_BED", "measured-temp", "0");
my $desiredTempSchlafzimmer = ReadingsVal("HZ_BED", "desired-temp", "0");
my $tempWohnzimmer = ReadingsVal("HZ_WOHNZ", "measured-temp", "0");
my $desiredTempWohnzimmer = ReadingsVal("HZ_WOHNZ", "desired-temp", "0");
my $returnMessage = "Büro: $tempBuero °C (-> $desiredTempBuero °C)\n";
$returnMessage = "Küche: $tempKueche °C (-> $desiredTempKueche °C)\n";
$returnMessage .= "Schlafz.: $tempSchlafzimmer °C (-> $desiredTempSchlafzimmer °C)\n";
$returnMessage .= "Wohnz.: $tempWohnzimmer °C (-> $desiredTempWohnzimmer °C)\n";

return $returnMessage;
}
######## Ende Status der Raumtemperaturen abfragen ############


Die Subroutine steht in der myyUtils. Die Utils funktioniert auch, andere Routinen funzen einwandfrei. Ganze System ist neu gestartet worden, das alle Daateien neu eingelesen werden. Fhem ist in der neusten Version aufgespielt, da mir Update sagt, keine neuen Updates vorhanden.

Wuehler

In der util fehlt vorm = in der viertletzen Zeile ( mit Küche) der punkt. $returnMessage wird da neu gesetzt,,

ErzGabriel

Besten Dank. Der fehlende Punkt war es. Obwohl ich mir den Code x mal durchgelesen habe, habe ich das nicht gesehen.

ErzGabriel

Moin.
Habe ein kleines Problem mit einem neuen Dialog. Verstehe leider nicht warum, weil manuelle funktioniert jeder Aufruf. Im Dialog bricht es immer beim schalten ab, es wird nichts mehr angezeigt und nichts geschaltet.
defmod klima_Dialog msgDialog {"Automatik":{\
  "message": [\
    "(Automatik einschalten) ",\
    "(Automatik ausschalten) ",\
    "(zurück) ",\
    "(abbrechen) ",\
    "Automatik schalten:"\
  ],\
    "Automatik einschalten":{\
    "message":[\
      "{return('(Büro Heizung) ') if(ReadingsVal('HZ_BUERO', 'mode', '') ne 'auto')}",\
      "{return('(Büro Ventilator) ') if(ReadingsVal('buero_autovent', 'state', '') ne 'Active')}",\
      "{return('(Wohnzimmer Heizung) ') if(ReadingsVal('HZ_WOHNZ', 'mode', '') ne 'auto')}",\
      "{return('(Wohnzimmer Ventilator) ') if(ReadingsVal('wohn_autovent', 'state', '') ne 'Active')}",\
      "{return('(Küchen Heizung) ') if(ReadingsVal('HZ_KUECHE', 'mode', '') ne 'auto')}",\
      "{return('(Schlafzimmer Heizung) ') if(ReadingsVal('HZ_BED', 'mode', '') ne 'auto')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welche Automatik soll eingeschaltet werden?"\
    ],\
    "Büro Heizung umschalten":{\
    "commands": "set HZ_BUERO mode auto",\
    "message":[\
      "(%me%) ",\
      "Büro Heizung wurde umgeschaltet."\
    ]\
    },\
    "Büro Ventilator umschalten":{\
    "commands": "set buero_autovent state Active",\
    "message":[\
      "(%me%) ",\
      "Büro Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Heizung umschalten":{\
    "commands": "set HZ_WOHNZ mode auto",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Heizung wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Ventilator umschalten":{\
    "commands": "set wohn_autovent state Active",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Küchen Heizung umschalten":{\
    "commands": "set HZ_KUCHE mode auto",\
    "message":[\
      "(%me%) ",\
      "Küchen Heizung wurde umgeschaltet."\
    ]\
},\
"Schlafzimmer Heizung umschalten":{\
    "commands": "set HZ_BED mode auto",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer Heizung wurde umgeschaltet."\
    ]\
}\
    },\
"Automatik ausschalten":{\
    "message":[\
      "{return('(Büro Heizung) ') if(ReadingsVal('HZ_BUERO', 'mode', '') ne 'manual')}",\
      "{return('(Büro Ventilator) ') if(ReadingsVal('buero_autovent', 'state', '') ne 'Inactive')}",\
      "{return('(Wohnzimmer Heizung) ') if(ReadingsVal('HZ_WOHNZ', 'mode', '') ne 'manual')}",\
      "{return('(Wohnzimmer Ventilator) ') if(ReadingsVal('wohn_autovent', 'state', '') ne 'Inactive')}",\
      "{return('(Küchen Heizung) ') if(ReadingsVal('HZ_KUECHE', 'mode', '') ne 'manual')}",\
      "{return('(Schlafzimmer Heizung) ') if(ReadingsVal('HZ_BED', 'mode', '') ne 'manual')}",\
      "(zurück) ",\
      "(abbrechen) ",\
      "Welche Automatik soll ausgeschaltet werden?"\
    ],\
    "Büro Heizung umschalten":{\
    "commands": "set HZ_BUERO mode manual",\
    "message":[\
      "(%me%) ",\
      "Büro Heizung wurde umgeschaltet."\
    ]\
    },\
    "Büro Ventilator umschalten":{\
    "commands": "set buero_autovent state Inactive",\
    "message":[\
      "(%me%) ",\
      "Büro Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Heizung umschalten":{\
    "commands": "set HZ_WOHNZ mode manual",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Heizung wurde umgeschaltet."\
    ]\
    },\
    "Wohnzimmer Ventilator umschalten":{\
    "commands": "set wohn_autovent state Inactive",\
    "message":[\
      "(%me%) ",\
      "Wohnzimmer Ventilator wurde umgeschaltet."\
    ]\
    },\
    "Küchen Heizung umschalten":{\
    "commands": "set HZ_KUECHE mode manual",\
    "message":[\
      "(%me%) ",\
      "Küchen Heizung wurde umgeschaltet."\
    ]\
    },\
    "Schlafzimmer Heizung umschalten":{\
    "commands": "set HZ_BED mode manual",\
    "message":[\
      "(%me%) ",\
      "Schlafzimmer Heizung wurde umgeschaltet."\
    ]\
    }\
   }\
}\
}
attr klima_Dialog allowed rr_Marcus
attr klima_Dialog room Telegram

setstate klima_Dialog rr_Marcus: Automatik einschalten
setstate klima_Dialog 2018-04-08 09:01:44 state rr_Marcus: Automatik einschalten

Wuehler


ErzGabriel

Beim Check auf der Seite, erhalte ich eine NULL als Ausgabe.

Wuehler

Json ist korrekt. Du musst die \ am Ende der Zeilen entfernen. Das Problem liegt in den Dialogworten:

"Automatik einschalten":{\
    "message":[\
      "{return('(Büro Heizung) ')



  ],\
    "Büro Heizung umschalten":{\
    "commands": "set HZ_BUERO mode auto",\


Büro Heizung
versus
Büro Heizung umschalten

Ich denke, du kannst das umschalten immer entfernen.

ErzGabriel

Das "umschalten" war es. Danke Dir für die Hilfe.

jazzor

#433
Hallo zusammen,
ich stehe gerade - wahrscheinlich der späten  Stunde geschuldet - arg auf dem Schlauch, vielleicht könnt ihr mir ja runterhelfen ;-)

Kann ich irgendwie einen "Titel" mit übergeben, der dann im Nachrichtenteil auf der Telegramseite fett markiert wird?
Im TelegramBot hab ich den "parseModeSend" auf "3_InMsg" stehen, und in notifies funktioniert es auch mit set TelegramBot msg Markdown *fetterText*
Allerdings bekomme ich es aus msgDialog nicht hin. Selbst wenn ich den Mardown als Titel im msgconfig Modul einstelle.
Hat jemand eine Idee?
Vielen Dank vorab!

Edit: Auch mehrere Tage später hab ich immer noch keine Möglichkeit gefunden, die Formatierung mit zu übergeben. Hat das wirklich noch nie jemand probiert?

ErzGabriel

Hallo.
Ich versuche gerade, den ein oder anderen Dialog auf die Beine zu stellen aber stoße da auf größere Probleme mit der Erstellung. Ich habe da wohl noch eine große Wissenslücke. Könnt Ihr mir mal bitte ein paar Tipps geben, welche Lektüre ich mir durchlesen sollte, um es zu lernen. Danke.