FHEM Forum

FHEM => Automatisierung => Thema gestartet von: lukeman11 am 20 Februar 2018, 18:51:10

Titel: [gelöst] HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 20 Februar 2018, 18:51:10
Hallo,
ich hoffe, ich habe das richtige Forum für mein Anliegen gefunden. "Codeschnipsel" schien mir nur für fertige Sachen zu sein.
Bin noch ziemlich neu, was Fhem und vor allem verschiedene Programmiersprachen angeht, sodass ich nicht überblicken kann, wie einfach etwas mit etwas Code umzusetzen ist.

Ich betreibe auf meinem Raspi Fhem und den MagicMirror2. Für den MM2 gibt es ein Modul namens MMM-PIR-Sensor (https://github.com/paviro/MMM-PIR-Sensor), welches dafür sorgt, dass der HDMI-Output vom Raspi nach x-Zeit deaktiviert wird, sodass der Bildschirm in den Standby-Modus geht. Das funktioniert auch wie es soll.

Meine Frage ist nun, ob ich die Befehle, die dieses Modul erzeugt, auch von Fhem ausführen lassen kann.
Ich habe bereits den Bewegungsmelder gemäß dieser Anleitung (https://www.computerhilfen.de/info/bewegungsmelder-hc-sr501-an-die-raspberry-pi-gpio-ports-anschliessen.html) in Fhem definieren können und damit auch eine Funksteckdose geschaltet.

Ich dachte, dass ich jetzt "ALARM" einfach durch Code zum aktivieren des HDMI-Outputs ersetzen könnte. Leider habe ich keine Ahnung wie dieser aussehen könnte. Im Internet habe ich dazu nichts gefunden.

Weiterführende Überlegungen meinerseits wären, dass man dann auch Zeiten vorgeben könnte, in denen das Display auf DauerAn ist, also auch ohne Bewegung oder dass der Monitor aus dem Standby geholt wird, wenn ein Anruf über die Fritzbox (die ich auch bereits erfolgreich definieren konnte) eingeht.

Nochmal zusammengefasst, geht es mir um den Codeschnipsel zum aktivieren bzw. deaktivieren des HDMI-Outputs am Raspi.

Vielleicht habe ich aber auch nur ein Brett vorm Kopf und sehe den Wald vor lauter Bäumen nicht. =(
Für eure Hilfe wäre ich unendlich dankbar.
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 20 Februar 2018, 19:30:32
Ich hab ja jetzt nicht alles genau umrissen darum mal sehen was ich verstanden hab:

PIR eingerichtet in fhem Pin8!?

Im MMM-PIR den Pin angegeben oder auf 22 belassen?

Wenn auf 22 belassen (bewusst), dann eben bei Bewegung und anderer Dinge den GPIO22 des PI setzen/zurücksetzen (gibt ein Modul in fhem dafür https://wiki.fhem.de/wiki/Raspberry_Pi:_GPIOs_schalten)

Dadurch sollte ja dann doch das MMM-PIR Modul entsprechend den HDMI (oder was halt konfiguriert ist) schalten...

Aber vielleicht lieg ich auch völlig falsch oder hab's total falsch verstanden...

EDIT: bzgl. Pin und GPIO hab ich jetzt grad keinen Pinplan zur Hand (grad nur Handy)...

Gruß, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 20 Februar 2018, 19:45:46
Zitat
PIR eingerichtet in fhem Pin8!?

Im MMM-PIR den Pin angegeben oder auf 22 belassen?

Nein, nein, die Anleitungen sind ja nur als Beispiel des Ablaufs. Natürlich habe ich sie z.B. bezüglich Pin-Belegung und Device-Namen auf mich zugeschnitten. In meinem Fall ist es GPIO_23.
Das MMM-PIR-Modul auf dem MM2 funktioniert einwandfrei und tut genau das was es soll. Ich möchte gerne das MMM-PIR Modul mit einer Lösung in Fhem ablösen, erkenne aber in den config-Dateien des Moduls keinen Code, den ich "einfach" in Fhem integrieren kann..

Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 20 Februar 2018, 19:52:25
Ah, jetzt...

D.h. das MMM-PIR "deaktivieren" und stattdessen alles aus fhem heraus!?

Ich hab schon mal mit PI und HDMI "rumgespielt" vielleicht finde ich das wieder...

Stichwort: cec-client

Bzw. bin ich grad darüber gestolpert: https://forum.fhem.de/index.php?topic=65505.0

Kurz, da nur Handy...

Gruß, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 26 Februar 2018, 14:55:47
Okay,
vielen Dank. Ich werde es nach meinem Urlaub mal ausprobieren. Allerdings befürchte ich, dass, wenn es klappt, der Monitor komplett ausgeschaltet wird und dann zu lange braucht um anzugehen.

Weitere Tipps sind gern gesehen.
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 26 Februar 2018, 18:52:14
Da müsstest du halt mal sehen welche cec-Befehle es (für dein Display) gibt...

Viel Erfolg, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: Kuzl am 27 Februar 2018, 15:04:58
ich mache das mit mit diesen Befehlen (aus dem Gedächtnis)
off: tvservice --off

on: tvservice --prefered
     fbset -depth 16
     fbset -depth 32
     xrefresh :0.0

Das ganze ist an einem HDMI-Monitor und schaltet diesen auf Standby und wieder an.
Wichtig: Die anzeige muss mit dem User sein, mit dem auch die Befehle durchgeführt werden.
Wenn also direk aus FHEM heraus die Befehle ausgeführt werden, muss der user fhem in der GUI angemeldet sein.
Ein TV wird dadurch z.b. nur "kein Signal" anzeigen. Über CEC-Signale kann man den aber z.b. komplett ein und ausschalten.
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 10 März 2018, 20:43:59
Vielen Dank auch aun Kunzl.

Ich habe es jetzt mit tvservice ausprobiert und das funktioniert ohne Probleme.

tvservice -o
schaltet den HDMI-Port aus,

tvservice -p
wieder an.

Ich kann das ganze auch über die FHEM-Befehlszeile mit z.B.
{system("tvservice -o")}
schalten.

Jetzt dachte ich mir, müsste ich ja meinen Bewegungsnotify irgendwie abändern können, aber ich habe die Syntax von dem Ding noch nicht so ganz begriffen.
define act_on_BewegungGPIO notify Bewegungsmelder { if ("$EVENT" ne "off") { fhem("set Steckdose_C on-for-timer 120;");}}

Also was bedeutet z.B. "ne" und wofür sind die ganzen Semikola da und was kann man da überhaupt alles eingeben. (Sorry für das Wirrwar, aber genauso sieht es in meinem Kopf gerade aus.)

Ich hätte jetzt gerne, dass bei Auslösen des Bewegungsmelders der Bildschirm angeht und nach 120sec wieder aus. Ich habe schon viel herumprobiert, auch mit sleep 120 usw, aber irgendwie funktioniert das alles nicht. Ich schätze ich verbocke dabei immer die Syntax des Notifys.
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 10 März 2018, 20:57:42
Am einfachsten den Eventmonitor öffnen, bei Filter Bewegungsmelder.* (sofern der tatsächlich so heißt).
Warten bis der Event kommt, den markieren und dann create/modify...

Dann einfach den set-Befehl, also ohne fhem, Klammern etc.

Wenn das Gerät on-for-timer kann, dann kannst du dort auch die 120Sekunden angeben...

Kurz, da nur Handy...

Gruß, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 10 März 2018, 21:12:01
So, jetzt noch ein wenig zu Klammern und so weiter...

innerhalb eines Notify/DOIF etc. bist du in fhem, d.h. du kannst einfach fhem Befehle absetzen:

define nTest notify RegEx set Lampe on

auch mehrere hintereinander:

define nTest notify RegEx set Lampe1,Lampe2 on

oder

define nTest notify RegEx set Lampe1 on; set Lampe2 off

Siehe auch: https://wiki.fhem.de/wiki/Notify (oder commandref)

Klammern: die '{ }' wechselt zur Perl Ebene.
D.h. wenn du in Perl bist und einen fhem Befehl aufrufen willst, dann:

{fhem("set Lampe on")}
ist aber im Beispiel unnötig...
...weil das dasselbe wie:
set Lampe on
wenn du nicht aus einem bestimmten Grund nach Perl gewechselt hast.

https://wiki.fhem.de/wiki/Klammerebenen

Ich würde auch erst einmal testen was in $EVENT "steht" bevor ich es benutze...
...und es gibt auch noch $EVTPART0, $EVTPART1, ...

'eq' bzw. 'ne' und so weiter ist Perl Vergleich von Zeichenketten:

if($EVENT eq "on") prüft ob eben in der Variablen (Zeichenkette) "on" steht.
eq = equal
ne = not equal (ungleich)
usw.

Wenn es sich um Zahlen handelt, dann eben '<', '>', '='

Gruß, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 11 März 2018, 16:56:40
Ah okay, das hat es etwas verständlicher gemacht.
Nach langem Probieren und scheitern und wieder Probieren usw. hab ich es realisieren können. Sieht jetzt folgendermaßen aus:


define Bewegungsmelder RPI_GPIO 23
attr Bewegungsmelder direction input
attr Bewegungsmelder interrupt both
attr Bewegungsmelder room MagicMirror

define HDMI_off notify Bewegungsmelder {if ("$EVENT" eq "off") { { system("tvservice -o")};; } }
attr HDMI_off room zz_Notifys

define HDMI_on notify Bewegungsmelder {if ("$EVENT" eq "on") { { system("tvservice -p")};; } }
attr HDMI_on room zz_Notifys


Die Zeit, die das Display nun an bleibt, regelt aktuell das Poti am Bewegungsmelder. Hätte ich lieber in FHEM geregelt, aber so geht es erstmal auch.

Falls man es eleganter lösen kann, z.B. Zeit in FHEM definieren oder auch mit nur einem Notify, nur raus damit. =)
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: rasti am 11 März 2018, 17:08:29

vielleicht inzwischen ein wenig off-topic.... aber ich habe das mal (ohne FHEM) an einem Raspi mal realisiert, auf dem Chrome im Kiosk-Mode zur Visualisierung vom FHEM bzw. Tablet UI läuft.

https://forum.fhem.de/index.php/topic,82905.msg750538.html

Viele Grüße

Ralf
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 11 März 2018, 17:57:36
Gratuliere!

Es geht natürlich auch mit einem Notify:

define HDMI_off notify Bewegungsmelder {if ("$EVENT" eq "off") { { system("tvservice -o")};; } elsif ("$EVENT" eq "on") { { system("tvservice -p")};; } }

Denke auch, dass du die geschweiften Klammern direkt um system nicht brauchst und wahrscheinlich auch nicht die doppelten ;;
(mag mich aber täuschen, ich packe sowas immer in eine Sub in myUtils, finde ich übersichtlicher / und zunächst mache ich dort nur eine Logausgabe mit den übergebenen Dingen wie beispielsweise $EVENT, dann weiß ich "was ich habe" https://wiki.fhem.de/wiki/99_myUtils_anlegen)

Du könntest wahrscheinlich auch das RegEx des Notify "einschränken", aktuell wird dein Notify (eigentlich wahrschinlich beide) bei allem was der Bewegungsmelder "feuert" durchlaufen...

Einfach mal im Eventmonitor schauen.

Evtl. geht sowas wie:

define HDMI_off notify Bewegungsmelder:(on|off) {if ("$EVENT" eq "off") { { system("tvservice -o")};; } elsif ("$EVENT" eq "on") { { system("tvservice -p")};; } }

Gruß, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 21 März 2018, 19:27:05
Zitat von: MadMax-FHEM am 11 März 2018, 17:57:36
Denke auch, dass du die geschweiften Klammern direkt um system nicht brauchst und wahrscheinlich auch nicht die doppelten ;;

Haste recht, hab ich geändert. Passt.

Zitat
(mag mich aber täuschen, ich packe sowas immer in eine Sub in myUtils, finde ich übersichtlicher / und zunächst mache ich dort nur eine Logausgabe mit den übergebenen Dingen wie beispielsweise $EVENT, dann weiß ich "was ich habe" https://wiki.fhem.de/wiki/99_myUtils_anlegen)

Da weiß ich noch nicht mit umzugehen. Ist wohl erstmal noch ein "versiegeltes Buch" für mich. :D

Vielen, vielen Dank Joachim für deine Hilfe.

Mit den Subs werde ich mich zu gegebener Zeit näher beschäftigen, das ist aber erstmal ein anderes Thema. =)
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: MadMax-FHEM am 22 März 2018, 11:41:13
Hi,

na dann weiterhin viel Spaß!

Und den Thread dann noch auf gelöst stellen: umbenennen in beispielsweise [gelöst] HDMI-Output an bei PIR-Bewegung

Das mit den myUtils ist kein "muss" und bei den "einfachen" if-Abfragen auch nicht zwingend.

Ich mache es halt so, dann kann ich zwischen Konfiguration und (perl)Code unterscheiden.
Konfiguration (also beispielsweise das "nackte" Notify) kommt nat. in die fhem.cfg dort wird dann eine Sub (Funktion) in myUtils aufgerufen, in etwa so:

define nTest notify Test:irgendwas {myTuWasFunktion($EVENT)}

und dann die "TuWasFunktion":


sub myTuWasFunktion($)
{
  my($Event) = @_; # Parameter

  Log3(undef, 3, "myTuWasFunktion Parameter: $Event");

  if(Bedingung)
  {
    fhem("set Irgendwas on");
  }
}


Der Parameter $EVENT ist nur als Beispiel (es geht auch $NAME, §EVTPART0, $EVTPART1, ... und anderes)...
...durch die Logausgabe des Parameters sehe ich dann auch gleich was tatsächlich ankommt etc.

Dort "programmiere" ich dann in perl was ich so an Abfragen brauche.
Fhem-Aufrufe dann eben über fhem() und Abfragen von Readings etc. per ReadingsVal, ReadingsNum, etc.

Wenn ich dann an den Abfragen etc. etwas ändern will gehe ich "nur" in die myUtils und "schraube" am Programm die Konfiguration bleibt davon (meist) unberührt...
...und (ich finde) Code ist dann in einer myUtils auch übersichtlicher als das dann alles noch in die Definition des Notify zu stecken...

Aber immer eins nach dem anderen ;)

Gruß, Joachim
Titel: Antw:HDMI-Output an bei PIR-Bewegung
Beitrag von: lukeman11 am 23 März 2018, 16:47:23
Alles klar, ich werde mir das demnächst mal anschauen.

Vielen Dank nochmal. :-)