Magic Mirror Raspberry Pi mit Shelly aktivieren

- Funkyhome Smarthome Forum
https://www.funkyhome.de

-- Homeautomation
https://forum.funkyhome.de/forums.cgi?forum=1

--- Magic Mirror Raspberry Pi mit Shelly aktivieren
https://forum.funkyhome.de/topic.cgi?forum=1&topic=33

Ein Ausdruck des Beitrags mit 24 Antworten ergibt bei 3 Antworten pro Seite ca. 8 DIN A4 Seiten. Das entspricht bei 80 g/m² ca. 39.92 Gramm Papier.


-- Veröffentlicht durch funkyhome am 8:07 am 30. Jan. 2023

Na ist doch gut :thumb:
Und falls du doch irgendwann nochmal mit dem Webserver auf dem Raspi weitermachen möchtest, sag einfach kurz Bescheid.
Vielleicht fangen wir dann einfach mal vorne bei der Installation an.


-- Veröffentlicht durch Henro am 6:51 am 30. Jan. 2023

Ja, er drückt jetz den Power Knopf vom Monitor.


-- Veröffentlicht durch funkyhome am 17:12 am 28. Jan. 2023

Schade, dass der Webserver auf deinem Raspi nicht laufen möchte, das hätte ich gerne noch mit dir hinbekommen und dann mittels Shelly den Magic Mirror bzw. Raspi angesteuert.
Was hast du denn jetzt mit dem zusätzlichen Shelly Uni angestellt, hast du es mit dem Shelly am GPIO "hart verdrahtet"?


-- Veröffentlicht durch Henro am 16:17 am 28. Jan. 2023

Um den Fall abzuschließen : ich habe es jetzt erfolgreich mit einem Shelly Uni gelöst :thumb:


-- Veröffentlicht durch funkyhome am 14:12 am 19. Dez. 2022

Und wenn du es so in der Konsole eingibst:
sudo vcgencmd display_power 0
Geht der Mirror aus?


-- Veröffentlicht durch Henro am 13:59 am 19. Dez. 2022

Habe ich gemacht, jetzt erhalte ich einfach nur eine leere weiße Seite. Der Spiegel bleibt aber an.


-- Veröffentlicht durch funkyhome am 9:40 am 13. Dez. 2022

Dann ist es immer noch ein Rechteproblem mit deinem Perl, aber wenn du es sonst nicht benötigst, probieren wir es mal mit php ;)

Der Inhalt der Datei poweron.php könnte so aussehen (code weglassen):

Code

<?php
/**
* HDMI einschalten
*/
shell_exec("sudo vcgencmd display_power 1");
?>


Und die Datei poweroff.php so:
Code

<?php
/**
* HDMI ausschalten
*/
shell_exec("sudo vcgencmd display_power 0");
?>


Dann versiehst du sie wieder mit Dateiberechtigung 755:
sudo chmod 775 /var/www/html/poweron.php
sudo chmod 775 /var/www/html/poweroff.php

Dann aufrufen mit (IP Adresse auf deine ändern):
http://192.168.1.123/poweron.php
http://192.168.1.123/poweroff.php


-- Veröffentlicht durch Henro am 9:02 am 13. Dez. 2022

leider ebenfalls forbidden :(


-- Veröffentlicht durch funkyhome am 7:14 am 10. Dez. 2022

Ich bin gerade unterwegs, aber da fällt mir ein, dass du vielleicht einfach nicht auf system oder nicht auf vcgencmd ohne sudo zugreifen kannst.
kommentiere die system Zeile mal aus und versuch mal den print Befehl, also so:

Code

   #!/usr/bin/perl
   #############
   # HDMI einschalten
   #############
   # system("vcgencmd display_power 1");
   print "Hello World";

Ansonsten probieren wir das einfach mal mit php.


-- Veröffentlicht durch Henro am 15:28 am 9. Dez. 2022

Habe ich gemacht, leider immer noch forbidden :(

Hier die Logs:

Code

apache2.service - The Apache HTTP Server
  Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
  Active: active (running) since Fri 2022-12-09 15:26:38 CET; 47s ago
    Docs: https://httpd.apache.org/docs/2.4/
 Process: 23699 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
Main PID: 23703 (apache2)
   Tasks: 7 (limit: 2059)
  CGroup: /system.slice/apache2.service
          &#9500;&#9472;23703 /usr/sbin/apache2 -k start
          &#9500;&#9472;23714 /usr/sbin/apache2 -k start
          &#9500;&#9472;23716 /usr/sbin/apache2 -k start
          &#9500;&#9472;23717 /usr/sbin/apache2 -k start
          &#9500;&#9472;23719 /usr/sbin/apache2 -k start
          &#9500;&#9472;23720 /usr/sbin/apache2 -k start
          &#9492;&#9472;23727 /usr/sbin/apache2 -k start

Dez 09 15:26:37 raspberrypi systemd[1]: Starting The Apache HTTP Server...
Dez 09 15:26:38 raspberrypi apachectl[23699]: AH00558: apache2: Could not reliab
Dez 09 15:26:38 raspberrypi systemd[1]: Started The Apache HTTP Server.
lines 1-19/19 (END)...skipping...
&#9679; apache2.service - The Apache HTTP Server
  Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Active: active (running) since Fri 2022-12-09 15:26:38 CET; 47s ago
    Docs: https://httpd.apache.org/docs/2.4/
 Process: 23699 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 23703 (apache2)
   Tasks: 7 (limit: 2059)
  CGroup: /system.slice/apache2.service
          &#9500;&#9472;23703 /usr/sbin/apache2 -k start
          &#9500;&#9472;23714 /usr/sbin/apache2 -k start
          &#9500;&#9472;23716 /usr/sbin/apache2 -k start
          &#9500;&#9472;23717 /usr/sbin/apache2 -k start
          &#9500;&#9472;23719 /usr/sbin/apache2 -k start
          &#9500;&#9472;23720 /usr/sbin/apache2 -k start
          &#9492;&#9472;23727 /usr/sbin/apache2 -k start

Dez 09 15:26:37 raspberrypi systemd[1]: Starting The Apache HTTP Server...
Dez 09 15:26:38 raspberrypi apachectl[23699]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Dez 09 15:26:38 raspberrypi systemd[1]: Started The Apache HTTP Server.


Und:

Code

-- Support: https://www.debian.org/support
-- Documentation: https://www.freedesktop.org/wiki/Software/systemd/multiseat
--
-- A new session with the ID 237 has been created for the user pi.
--
-- The leading process of the session is 23644.
Dez 09 15:25:00 raspberrypi systemd[1]: Started Session 237 of user pi.
-- Subject: A start job for unit session-237.scope has finished successfully
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit session-237.scope has finished successfully.
--
-- The job identifier is 11134.
Dez 09 15:25:45 raspberrypi sudo[23669]:       pi : TTY=pts/0; PWD=/etc; USER=root; COMMAND=/usr/bin/mkdir httpd
Dez 09 15:25:45 raspberrypi sudo[23669]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
Dez 09 15:25:45 raspberrypi sudo[23669]: pam_unix(sudo:session): session closed for user root
Dez 09 15:25:57 raspberrypi sudo[23674]:       pi : TTY=pts/0; PWD=/etc/httpd; USER=root; COMMAND=/usr/bin/mkdir conf
Dez 09 15:25:57 raspberrypi sudo[23674]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
Dez 09 15:25:57 raspberrypi sudo[23674]: pam_unix(sudo:session): session closed for user root
Dez 09 15:26:13 raspberrypi sudo[23679]:       pi : TTY=pts/0; PWD=/etc/httpd/conf; USER=root; COMMAND=/usr/bin/nano httpd.conf
Dez 09 15:26:13 raspberrypi sudo[23679]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
Dez 09 15:26:27 raspberrypi sudo[23679]: pam_unix(sudo:session): session closed for user root
Dez 09 15:26:37 raspberrypi sudo[23682]:       pi : TTY=pts/0; PWD=/etc/httpd/conf; USER=root; COMMAND=/etc/init.d/apache2 restart
Dez 09 15:26:37 raspberrypi sudo[23682]: pam_unix(sudo:session): session opened for user root by pi(uid=0)
Dez 09 15:26:37 raspberrypi systemd[1]: Stopping The Apache HTTP Server...
-- Subject: A stop job for unit apache2.service has begun execution
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A stop job for unit apache2.service has begun execution.
--
-- The job identifier is 11199.
Dez 09 15:26:37 raspberrypi apachectl[23694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Dez 09 15:26:37 raspberrypi systemd[1]: apache2.service: Succeeded.
-- Subject: Unit succeeded
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The unit apache2.service has successfully entered the 'dead' state.
Dez 09 15:26:37 raspberrypi systemd[1]: Stopped The Apache HTTP Server.
-- Subject: A stop job for unit apache2.service has finished
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A stop job for unit apache2.service has finished.
--
-- The job identifier is 11199 and the job result is done.
Dez 09 15:26:37 raspberrypi systemd[1]: Starting The Apache HTTP Server...
-- Subject: A start job for unit apache2.service has begun execution
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit apache2.service has begun execution.
--
-- The job identifier is 11199.
Dez 09 15:26:38 raspberrypi apachectl[23699]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Dez 09 15:26:38 raspberrypi systemd[1]: Started The Apache HTTP Server.
-- Subject: A start job for unit apache2.service has finished successfully
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit apache2.service has finished successfully.
--
-- The job identifier is 11199.
Dez 09 15:26:38 raspberrypi sudo[23682]: pam_unix(sudo:session): session closed for user root


(Geändert von Henro um 15:30 am 9. Dez. 2022)


-- Veröffentlicht durch funkyhome am 7:28 am 6. Dez. 2022

Hmm, trotz Apache Neustart keine Besserung?
Dann erstelle mal folgende Datei:
/etc/httpd/conf/httpd.conf
Mit folgendem Inhalt:

Code
<Directory "/var/www">
AllowOverride None
Require all granted
</Directory>

Danach wieder Apache Neustart.
Hast du denn mal in die Logs reingeschaut?


-- Veröffentlicht durch Henro am 22:02 am 5. Dez. 2022

Ich hab alles ge-chmod-ded was mir eingefallen ist :lol:

/usr/bin/perl gibt es :thumb:


-- Veröffentlicht durch funkyhome am 22:12 am 3. Dez. 2022

Hört sich immernoch nach dem Rechte Problem an.
chmod hattest du für das .pl File ohne Fehlermeldung ausgeführt?

Bei dir dann natürlich im html Verzeichnis mit:
chmod 775 /var/www/html/poweron.pl
Alternativ probiere es mal mit:
sudo chmod 775 /var/www/html/poweron.pl
Für das poweron Script.

Ggf. noch für das Verzeichnis, da es ja ohnehin nur lokal verwendet wird:
sudo chmod 775 /var/www/html

Und schau auch mal, ob es bei dir überhaupt /usr/bin/perl gibt.
Vielleicht ist die Verzeichnisstruktur bei dir etwas anders.

Das sollte aber eigentlich auch in deinen Logs etwas genauer stehen.

Ansonsten schreiben wir es mal als .php File um, aber Perl sollte natürlich auch klappen.


-- Veröffentlicht durch Henro am 21:47 am 3. Dez. 2022

ich habe die Verzeichnisse und Dateien berechtigt und kann auch auf die index Datei zugreifen, jedoch nicht auf die Scripte.


-- Veröffentlicht durch funkyhome am 12:20 am 3. Dez. 2022

Hast du die Rechte für die Datei und ggf. noch die Verzeichnisse vergeben?
chmod 775 /var/www/poweron.pl
Kannst du die index Datei aufrufen, die dort in dem Verzeichnis drin liegen sollte?


-- Veröffentlicht durch Henro am 12:04 am 3. Dez. 2022

Ich bekomme beim Aufruf der Scripte nun:


Forbidden
You don't have permission to access this resource.

Apache/2.4.38 (Raspbian) Server at 192.168.178.66 Port 80



Der Apache startet nicht neu wegen der Zeile

Options FollowSymLinks +ExecCGI

Ändere ich diese in

Options +ExecCGI

Dann startet er :noidea:


-- Veröffentlicht durch funkyhome am 8:58 am 2. Dez. 2022

Lösche die httpd.conf mal wieder und starte den Apache nochmal neu.
Wenn er dann wieder ohne Fehlermeldung startet, trag es direkt ganz am Ende in die apache2.conf ein und starte den Apache neu.
Falls der Fehler immernoch auftritt, poste mal den Inhalt von:
systemctl status apache2.service
und
journalctl -xe
Oder schau kurz rein, was dort für Fehler aufgeführt sind.


-- Veröffentlicht durch Henro am 8:45 am 2. Dez. 2022

ok ... die Datei httpd.conf gibt es nicht, wenn ich sie anlege mit den beiden Zeilen dann ändert es nichts.

Wenn ich die beiden Zeilen in die apache.conf einfüge dann startet anschließend der Apache nicht neu, sondern gibt das hier aus:

Code
[....] Restarting apache2 (via systemctl): apache2.serviceJob for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.
failed!



-- Veröffentlicht durch funkyhome am 5:51 am 2. Dez. 2022

Das passt soweit :thumb:
Den DocumentRoot könntest du in der apache.conf anpassen, aber lass es ruhig so.

Wenn dein .pl Code angezeigt wird, anstatt ausgeführt, dann ist das auch soweit richtig, denn eigentlich gehören Scripte in ein Unterverzeichnis namens /cgi-bin/ das man unter dem Pfad mit ausführbaren Recht (z.B. 755) anlegt.

Alternativ kannst du auch in deiner /etc/apache2/apache2.conf (bzw. lieber in der httpd.conf da die httpd.conf meist innerhalb deiner apache2.conf geladen wird und auch bei Updates, etc. erhalten bleibt) folgendes ans Ende eintragen, damit die Scripte auch in anderen Verzeichnissen ausgeführt werden können:
AddHandler cgi-script .cgi .pl
Options FollowSymLinks +ExecCGI


Danach mit folgendem Befehl den Apache einmal neu starten lassen:
sudo /etc/init.d/apache2 restart

Es gäbe auch noch ein paar andere Grnde, warum das Script nicht ausgeführt wird (Alias directive, Perl deaktiviert, etc., aber probier das erstmal so aus.


-- Veröffentlicht durch Henro am 23:00 am 1. Dez. 2022

Habe ich gemacht. Wenn ich die Dateien in /var/www/ erstelle, bekomme ich vom Browser "datei nicht gefunden". Lege ich sie statt dessen in /var/www/html/ dann zeigt mir der Browser den Code an :noidea:


-- Veröffentlicht durch funkyhome am 11:43 am 1. Dez. 2022

Genauso wie du es im crontab ausführst, nur über eine .pl oder .php Datei.

Zum Beispiel könnte es eine ganz primitive Perl Datei ganz ohne Schnickschnack sein.

Der Inhalt der Datei poweron.pl könnte so aussehen (code weglassen und mit #!/usr/bin/perl beginnen):

Code

#!/usr/bin/perl
#############
# HDMI einschalten
#############
system("vcgencmd display_power 1");



Und die Datei poweroff.pl so:

Code

#!/usr/bin/perl
#############
# HDMI ausschalten
#############
system("vcgencmd display_power 0");


Diese Dateien legst du in deinem webserver Verzeichnis ab.
Das Standardverzeichnis ist meist: /var/www/

Dann versiehst du die Datei mit Dateiberechtigung 755, das geht als Admin z.B. mit dem Befehl:
chmod 775 /var/www/poweron.pl

Aufgerufen wird sie dann z.B. über eine Szene oder direkt in der Shelly Geräteoberfläche in Actions über "Url to be hit ..." und dort dann http:// deine Raspi IP /poweron.pl eintragen, also z.B.:
http://192.168.1.123/poweron.pl

Am besten natürlich zum Testen erstmal in einem Browser auf dem PC aufrufen, der sich im gleichen lokalen Netzwerk befindet.


-- Veröffentlicht durch Henro am 9:46 am 1. Dez. 2022

Super, "gesagt getan" habe ich apache auf dem Raspberry installiert und php :punk:

Ich habe mich hierzu an folgende Anleitung gehalten: https://www.heise.de/tipps-tricks/Raspberry-Pi-als-Webserver-einrichten-so-klappt-s-4988855.html

Die Befehle zum HDMI An/Aus Schalten die ich nutze sind "vcgencmd display_power 1" und "vcgencmd display_power 0"

Diese nutze ich auch per crontab zur geplanten Nachtabschaltung.

Wie bekomme ich nun den Raspberry Pi dazu die auszuführen wenn ich den Shelly schalte? :noidea:


-- Veröffentlicht durch funkyhome am 18:49 am 30. Nov. 2022

Hört sich nach einem sehr guten Plan an :thumb:
Dazu fallen mir ein paar Möglichkeiten ein ...

Man könnte eine URL aufrufen lassen, die auf deinem Magic Mirror bzw. Raspi eine Aktion auslöst.
Dafür müsstest du den Webserver aktivieren (falls er nicht ohnehin aktiv ist) dort dann ein Perl oder PHP oder Python oder was auch immer Script ablegen, das dann wiederum lokal den Standby Modus aktiviert bzw. aufhebt.

Alternativ könnte man das Ganze auch "hart verdrahten", indem man einen weiteren Shelly oder was auch immer schaltet der deine Powertaste am GPIO auslöst.
Quasi wie der USB Ultra IR Infrarot Power On/Off im OCinside.de Fanshop, wo ein Optokoppler den Powertaster auslöst.


-- Veröffentlicht durch Henro am 15:39 am 30. Nov. 2022

Ich steige in die Diskussion um den tollen Shelly Test mal mit einer praxisrelevanten Frage ein:

Und zwar baue ich mir gerade mit einem Lichtschalter inkl. Kontrolllampe und einem Shelly Plus i4 einen "Haus Ein/Aus" Schalter. Er wird immer dann betätigt wenn der letzte das Haus verlässt bzw. der erste das Haus betritt.

Der Shelly bzw. seine Schaltstellung ist nun eine weitere Bedingung bei diversen Szenen, z.B. die des Shellys der die Zirkulationspumpe für das warme Wasser steuert. Die Szene startet nun nur noch wenn die Schaltstellung des i4 auf "ein" steht.

So möchten wir unnötigen Energieverbrauch im Haus vermeiden ohne auf Komfort zu verzichten und es möglichst einfach halten.


Jetzt zu meiner eigentlichen Frage: Ich möchte irgendwie erreichen, dass der Shelly i4 wenn er schaltet auch den Raspberry Pi hinter meinem Magic Mirror kontaktiert und dieser dann einen Befehl ausführt, nämlich den zum aktivieren/deaktivieren der HDMI Verbindung. So soll der Mirror bzw. der Bildschirm in den Standby gehen, was ja Sinn macht wenn eh niemand da ist.

Auf dem Raspberry Pi läuft das standard Image.

Hat jemand eine Idee? Ich habe momentan leider noch nicht mal den Hauch eines Ansatzes :noidea:


Funkyhome Smarthome Forum
© 2024 www.funkyhome.de