msgDialog: Instant Messaging als FHEM Interface

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

Vorheriges Thema - Nächstes Thema

brown78

Ja, da habe ich bisher darauf verzichtet. Habe im TekegramBot Favoriten angelegt und da sind Umlaute dabei die werden angezeigt.

binford6000

Irgendwelche Fehlermeldungen im Log? Ggf. verbose hochsetzen.

brown78

Werde ich morgen machen (verbose hoch) derzeit keine Einträge. Danke schon mal für diese geduldige Hilfe. Schönen Abend noch!

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

brown78

#709
So, nachdem heute morgen alle devices, also Roommate, TelegramBot, msgConfig und msgDialog verschwunden waren, habe ich alles nochmal mit anderen Bezeichnungen angelegt. Verbose habe ich gleich auf 5 gesetzt. Immer noch kein Dialog in Telegram aber hier mal das Log:

2020.04.05 08:05:30 5: msgConfig msg_Config: called function msgConfig_Notify()
2020.04.05 08:05:30 4: msg MKr: Received push message from Homebot: diag
2020.04.05 08:05:30 5: msgDialog (met_Dialog) - entering msgDialog_Notify
2020.04.05 08:05:30 4: msgDialog (met_Dialog) triggered by "MKr fhemMsgRcvPush: diag"
2020.04.05 08:05:30 5: msgDialog (met_Dialog)
    entering msgDialog_progress
        recipients: MKr
        message:    diag
        force:      0
2020.04.05 08:05:30 5: msgDialog (met_Dialog) - entering msgDialog_evalSpecials


Edit: Jetzt geht es, hatte im msgConfig me: statt me=....

brown78

#710
Habe nochmal eine Frage. Als erstes mal mein Code aus dem rllDialog:

{ "Rolläden": {
    "message": [
      "( Schlafzimmer ) ",
      "( Kinderzimmer ) ",
      "( Galerie ) ",
      "( abbrechen ) ",
      "Raum auswählen"
    ],
    "Schlafzimmer": {
      "message": [
        "( Auf ) ",
        "( Zu ) ",
        "( Schritt auf ) ",
        "( Schritt zu ) ",
        "( abbrechen ) ",
        "Rolladen im $message bedienen"
      ],
      "Auf": {
        "commands": [
           "set HM_Schlafzimmer_RA off"
        ],
        "message": [
        "Rolladen im Schlafzimmer geöffnet"
        ]
      },
      "Zu": {
        "commands": [
           "set HM_Schlafzimmer_RA on"
        ],
        "message": [
        "Rolladen im Schlafzimmer geschlossen"
        ]
      },
      "Schritt auf": {
        "commands": [
           "set HM_Schlafzimmer_RA up 10"
        ],
        "message": [
        "Rolladen im Schlafzimmer +10% geöffnet"
        ]
      },
      "Schritt zu": {
        "commands": [
           "set HM_Schlafzimmer_RA down 10"
        ],
        "message": [
        "Rolladen im Schlafzimmer +10% geschlossen"
        ]
      }
    }
  }
}


Um den Code nicht für jeden Raum wiederholen zu müssen, dachte ich mit $message kann ich das bestimmt irgendwie hinbekommen. Bisher funktioniert das natürlich nur für Schlafzimmer, da ich ja nur das definiert habe. Wie kann ich festlegen, dass in diesen "Block" gesprungen wird wenn Schlafzimmer oder Kinderzimmer oder Galerie geklickt wurde? Und wie baue ich das cmd dann zusammen?
Meine Schalter sind so benannt wie im Beispiel ersichtlich: HM_Schlafzimmer_RA, ich möchte also so etwas wie "HM_" + $message + "_RA" machen.

brown78

#711
Habe es so probiert, funktioniert aber nicht.

{ "Rolläden": {
    "message": [
      "( Schlafzimmer ) ",
      "( Kinderzimmer ) ",
      "( Galerie ) ",
      "( abbrechen ) ",
      "Raum auswählen"
    ],
    "Raum": {
      "match": " ?([Schlafzimmer] | [Kinderzimmer] | [Galerie]) ?",
      "message": [
        "( Auf ) ",
        "( Zu ) ",
        "( Schritt auf ) ",
        "( Schritt zu ) ",
        "( abbrechen ) ",
        "Rolladen im $message bedienen"
      ],
      "Auf": {
        "commands": [
           "set HM_Schlafzimmer_RA off"
        ],
        "message": [
        "Rolladen im $message geöffnet"
        ]
      },
      "Zu": {
        "commands": [
           "set HM_Schlafzimmer_RA on"
        ],
        "message": [
        "Rolladen im $message geschlossen"
        ]
      },
      "Schritt auf": {
        "commands": [
           "set HM_Schlafzimmer_RA up 10"
        ],
        "message": [
        "Rolladen im $message +10% geöffnet"
        ]
      },
      "Schritt zu": {
        "commands": [
           "set HM_Schlafzimmer_RA down 10"
        ],
        "message": [
        "Rolladen im $message +10% geschlossen"
        ]
      }
    }
  }
}


Edit:
Mit
"match": "Schlafzimmer|Kinderzimmer|Galerie",
Funktioniert zumindest die Raumauswahl. bleibt noch das cmd zu basteln.

HeikoE

Bei den commands hatte ich auch ein Problem.
Ich wollte unter gewissen Umständen die letzte Message löschen. Die ID steht im Reading Telegram:sentMsgId.
Im Message-Teil werden Readings mittels eckiger Klammern ausgewertet, z.B.

"message": [
"Temperatur: [DR.DWD:temperature]",
...]

Im Command-Teil geht das NICHT, also

"commands": [ "set Telegram msgDelete [Telegram:sentMsgId]",

hat keine Funktion.

Was aber geht, ist mit dem Attribut "evalSpecials" zu arbeiten:

attr Dialog evalSpecials sentMsgId=[Telegram:sentMsgId]

Dies kann dann mittels "%...%" verwendet werden:

"commands": [
         "set Telegram msgDelete %sentMsgId%",
...]

Dieses Konstrukt funktioniert problemlos.

Langer Rede kurzer Sinn: vielleicht hilft Dir "evalSpecials" weiter.
Gruß Heiko

brown78

#713
Zitat von: HeikoE am 05 April 2020, 21:50:50
Langer Rede kurzer Sinn: vielleicht hilft Dir "evalSpecials" weiter.
Gruß Heiko

Vielen Dank für die Antwort! Habe es etwas anders gelöst. Im TelegramBot gibt es das Reading "prevMsgText", dem Namen entsprechend enthält dieses Reading die vorhergehende Nachricht. Damit habe ich es nun hinbekommen, dass auch nach dem Steuern eines Rollo, der entsprechende Raumname angezeigt wird. Bleibt nur noch das Problem mit dem cmd. Hierzu müsste ich ja einen String zusammenbasteln und zwar aus "HM_" + [TelegramBot:prevMsgText] + "_RA". Hier dann ggf. evalSpecials verwenden... Mal schauen ob ich das noch hinbekomme.

Hier mal mein Versuch, hab in evalSpecials noch prevMsg=[TelegramBot:prevMsgText] bCmd=HM_ eCmd=_RA hinzugefügt. In command funktioniert das zusammensetzen scheinbar nicht, der Befehl wird nicht ausgeführt, im Log steht nichts dazu. In message funktioniert das Zusammensetzen der strings %bCmd%%prevMsg%%eCmd%, dort brauche ich es aber eingentlich nicht...

{ "Rolläden": {
    "message": [
      "( Schlafzimmer ) ",
      "( Kinderzimmer ) ",
      "( Galerie ) ",
      "( abbrechen ) ",
      "Raum auswählen"
    ],
    "Schlafzimmer": {
      "match": "Schlafzimmer|Kinderzimmer|Galerie",
      "message": [
        "( Auf ) ",
        "( Zu ) ",
        "( Schritt auf ) ",
        "( Schritt zu ) ",
        "( abbrechen ) ",
        "Rolladen $message bedienen"
      ],
      "Auf": {
        "commands": [
           "set %bCmd%%prevMsg%%eCmd% off"
        ],
        "message": [
        "Rolladen %bCmd%%prevMsg%%eCmd% geöffnet"
        ]
      },
      "Zu": {
        "commands": [
           "set HM_Schlafzimmer_RA on"
        ],
        "message": [
        "Rolladen %prevMsg% geschlossen"
        ]
      },
      "Schritt auf": {
        "commands": [
           "set HM_Schlafzimmer_RA up 10"
        ],
        "message": [
        "Rolladen %prevMsg% +10% geöffnet"
        ]
      },
      "Schritt zu": {
        "commands": [
           "set HM_Schlafzimmer_RA down 10"
        ],
        "message": [
        "Rolladen %prevMsg% +10% geschlossen"
        ]
      }
    }
  }
}

brown78

#714
Also ich bräuchte bitte nochmal Hilfe. Ich hab einiges ausprobiert, mein command wird aber nicht ausgeführt bzw. zeigt keine Wirkung.
Im msg_Config habe ich das Attribut evalSpecials xCmd=HM_[Homebot:prevMsgText]_RA angelegt. Wenn ich in message nun %xCmd% ausgeben lasse, dann steht da HM_Schlafzimmer_RA.
Wenn ich aber in command "set %xCmd% off" angebe, dann wir der Rollo nicht geöffnet.

HeikoE



Zitat von: brown78 am 07 April 2020, 11:15:28
Im msg_Config habe ich das Attribut evalSpecials xCmd=HM_[Homebot:prevMsg]_RA angelegt.
Sollte das Reading nicht 'Homebot:prevMsgText'?

brown78


brown78

Habe gerade einen weiteren Dialog erstellt für meine Leselampen, diese werden mit einer LightScene gesteuert. Hier muss also kein String zusammengesetzt werden.
trotzdem funktioniert das command "set Leselampen scene $message" nicht. Kann man im command überhaupt eine variable verwenden?

ErzGabriel

Hi zusammen.
Ich habe da mal ne Frage.
Mein Device liefert mir ein Symbole in Fhem, im Bot taucht nur die Bezeichnung des Symboles auf, wie kann ich das in Text umwandeln.
Beispiel:
Device gibt rc_dot@blue als blauen Punkt aus. In Telegram taucht rc_dot@blue auf, das würde ich gerne in Text "blau" umwandeln.

brown78

Zitat von: ErzGabriel am 08 April 2020, 19:16:17
Hi zusammen.
Ich habe da mal ne Frage.
Mein Device liefert mir ein Symbole in Fhem, im Bot taucht nur die Bezeichnung des Symboles auf, wie kann ich das in Text umwandeln.
Beispiel:
Device gibt rc_dot@blue als blauen Punkt aus. In Telegram taucht rc_dot@blue auf, das würde ich gerne in Text "blau" umwandeln.

Bin zwar kein Profi, aber du könntest bspw. in Deinem device ein userattr anlegen und da den Text "blau" rein schreiben. Nehmen wir an es ist ein dummy, der mittels DOIF die Farbe blau anzeigt, dann kann das DOIF auch das attr color blau setzen. Wenn DU jetzt in dem msg_Config device in msg_evalSpecials color=[dmy:color], dann kannst Du im msg_Dialog "message": [ "%color%" ] verwenden um den Text "blau" anzeigen zu lassen.

Vielleicht geht es aber auch mit Perl Code in message, das weiß ich aber nicht.