Seite 1 von 4
Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 15. Jun 2020 12:50
von shaggy0815
Hallo liebe Foren Mitglieder.
Ich wollte gerne, wenn auch mit eingeschränkten Möglichkeiten, meine Lampen von aussen steuern ohne mein System nach aussen irgendwie freigeben
zu müssen.
Nun habe ich das Telegramm Binding installiert und kann über einen privaten Chat meine Lampen schalten. Jetzt möchte ich natürlich auch wissen ob die
Lampen geschaltet wurden. Meine Idee wäre eine Anfrage per Telegramm zu schicken nach dem Motto: Welche Lampen sind ein?
Meine Frage wäre: Ist es Möglich irgendwie in OpenHAB in einer Schleife abzufragen welche Lampen eingeschaltet sind. So das ich deren Status per Telegramm Action in einem Telegramm senden kann. Quasi Lampe Küche = ein, Lampe Wohnzimmer = ein, etc.
Ich erwarte keine fertige Lösung, aber falls mich jemand in die richtige Richtung schicken könnte, dann würde ich versuchen mich gezielt schlau zu machen und dies umzusetzen, falls es möglich ist.
Für Anregungen wäre ich sehr dankbar.
Viele Grüße und eine erfolgreiche Woche
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 15. Jun 2020 16:03
von udo1toni
Ja sicher, das geht z.B. über Gruppen. Da ich telegram nicht nutze, weiß ich aber nicht, wie die Fragen in konkrete Handlungen (Rule triggern) umgesetzt werden. In einer passenden Rule musst Du jedenfalls nur die Gruppe der Lampen durchlaufen, z.B. gefiltert nach eingeschalteten Lampen. Dann schickt die Rule ein Telegram der Art: "Es sind x Lampen an, das sind... und ...", x ist die Anzahl (lässt sich über .size abfragen) und die Namen generiert man über eine Schleife, die die gefilterte Liste ausliest.
Gesendet von meinem SM-G973F mit Tapatalk
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 15. Jun 2020 17:54
von shaggy0815
Hallo Udo,
vielen Dank für Dein Feedback.
Ich dachte mir schon, dass ich irgendwie die Gruppe nutzen muss. Alle meine Lampen sind auch in der gleichen Gruppe. Also die Gruppe wäre da.
Nur wie durchsuche ich die Gruppe im Code mit einem Filter? Gibt es irgendwo eine Art Befehlsreferenz die ich durcharbeiten könnte?
In einer SPS würde ich sowas mit einer Art Schleife durchlaufen und mir die gefundenen Lampen in einer Art Liste zwischenspeichern, welche ich später ausgeben kann. Nur ist mir nicht klar wie ich dies so ähnlich mit OpenHAB umsetzen kann.
Kann ich mir eine Art Array erzeugen welches ich als Speicher nutzen kann?
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 15. Jun 2020 23:17
von shaggy0815
Hallo Zusammen,
ich habe ein wenig Google bemüht und habe daraufhin folgende Regel erstellt:
Code: Alles auswählen
rule "Telegramm Status Lampen anfordern"
when
Item LastMessageText received update "Status Lampen"
then
val StringBuilder sb = new StringBuilder
gLampen.members.filter[ i | i.state == ON].forEach[i | sb.append(", " + i.name) ]
sendTelegram("openHAB", sb.toString)
end
Dies tut genau das was ich will. Ich bekomme alle meine Lampen die den Status ON haben in einer Telegramm Nachricht gemeldet. Eine Frage hätte
ich zum Verständnis. Offensichtlich ist i die Schleifenvariable, welche wohl direkt vom System anhand der Gruppenmitglieder bestimmt wird, richtig?
Eine echte Befehlsreferenz zu openHAB, welche man durcharbeiten könnte, scheint es nicht zu geben, oder?
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 16. Jun 2020 13:29
von udo1toni
shaggy0815 hat geschrieben: ↑15. Jun 2020 23:17
Offensichtlich ist i die Schleifenvariable, welche wohl direkt vom System anhand der Gruppenmitglieder bestimmt wird, richtig?
Genau. In VB hieße es sinngemäß: For Each i in filter ... Next.
.members liefert eine Liste von Items.
.filter filtert eine Liste und hat als Ergebnis wieder eine Liste (von Items).
.forEach durchläuft eine Liste.
i| ist in diesem Fall der Stellvertreter für jedes einzelne Element der Liste. i ist in diesem Moment also ein vollwertiges Item, entsprechend kann man mit i.name den Namen des Items erfahren (der dann aber nicht i lautet, denn i ist ja in diesem Moment ein ein anderes Item... ähh...

)
Eine echte Befehlsreferenz zu openHAB, welche man durcharbeiten könnte, scheint es nicht zu geben, oder?
Ja. Du kannst aber VSCode und das openHAB plugin installieren und einrichten (in den Einstellungen den host auf Dein openHAB2-System einrichten), dann bekommst Du Autocompletion usw. und darüber auch eine kontextbezogene Befehlsreferenz. Aber leider keine Dokumentation...
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 17. Jun 2020 11:15
von shaggy0815
Hallo Udo,
danke für deine Erklärungen.
VSCode nutze ich schon so wie Du es beschrieben hast. Hab jedoch nie so wirklich auf die kontextbezogene Befehlsreferenz geachtet.
Ich werde versuchen diese in Zukunft mehr zu nutzen und mal ein bisschen damit rumspielen.
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 18. Jun 2020 15:19
von peter-pan
Das ist zwar nicht viel, aber vielleicht hilft dir das schon ein Stück weiter. Schau mal
hier unter Rules DSL.
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 18. Jun 2020 19:51
von djuscha
shaggy0815 hat geschrieben: ↑15. Jun 2020 12:50
Nun habe ich das Telegramm Binding installiert und kann über einen privaten Chat meine Lampen schalten.
Wie machst du das mit Telegramm könntest du deine Rules posten? Geht das mit normalem Telegramm binding?
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 18. Jun 2020 22:35
von shaggy0815
Hallo Djuscha,
jup, Du brauchst das Telegramm Binding und auch das Telegramm Action. Dies sind separate Plugins.
Du musst Dir dann im Telegramm per Bodfather einen privaten Chat-Kanal aufbauen. Wie dies geht ist sogar mal sehr gut dokumentiert in der Hilfe
zum Binding.
Das Binding stellt Dir dann den Chanel LastMessageText zur Verfügung welchen Du einbindest. Im entsprechenden Item siehst Du dann immer deinen
letzten Text denn Du in deinem privaten Chat geschrieben hast. Diesen kannst Du einfach in einer Regel auswerten und dann damit Lampen schalten.
Hier ein Beispiel:
Code: Alles auswählen
rule "Telegramm alle Lampen aus"
when
Item LastMessageText received update "Lampen aus"
then
gLampen.sendCommand(OFF)
end
Hier sende ich an meinen privaten Chat den Text "Lampen aus". Wenn ich diesen String in LastMessageText bekomme schalte ich damit die Lampen aus.
Auf die gleiche weise kannst Du natürlich auch Lampen einschalten, etc.
In einer weiteren Regel frage ich dann nach dem Status der Lampen und bekomme den Staus aller Lampen über den Chat von openHAB zurückgemeldet. Die Regel dafür hab ich schon gepostet.
Über das Binding kannst Du meines Wissens nur Empfangen. Daher brauchst Du auch noch Telegramm Action, wenn openHAB dir auch was senden soll. Beides verwendet natürlich den gleichen Chat.
Re: Möglichkeit der Abfrage welche Lampen eingeschaltet sind per Telegramm
Verfasst: 19. Jun 2020 11:10
von udo1toni
ACHTUNG! Es gibt ein Telegram v1 Binding und ein Telegram v2 Binding. Wenn Du das Telegram v1 Binding nutzt, brauchst Du die Telegram v1 Action- Wenn Du das Telegram v2 Binding nutzt, ist die Action schon mit dabei, sie wird allerdings anders aufgerufen als die v1 Action. Siehe Dokumentation:
https://www.openhab.org/addons/bindings ... le-actions