Mit FHEM auf einem anderen RPI GPIO schaltern ?

Begonnen von cs-online, 09 September 2018, 14:39:44

Vorheriges Thema - Nächstes Thema

cs-online

Hallo,

ich habe FHEM auf einem RPI 2 und habe einen RPI Zero W ohne FHEM, auf dem ich WiringPi installiert habe. Der ZeroW wird sonst für den Empfang von XIAOMI Pflanzensensoren über BLE genutzt, daher ist da schon die SSH-Verbindung vom FHEM-Raspi möglich. Wenn ich auf dem FHEM-Raspi nun dies hier eingebe:

ssh 'pi@FHEM-IP' gpio -g read 17

dann bekomme ich auch eine 1 oder 0, je nach Zustand. Soweit alles gut. Wenn ich aber in FHEM dies eingebe:

{system("ssh 'pi@192.168.2.21' gpio -g read 17")}

dann bekomme ich nach einigem Warten nur eine "-1", egal welcher Zustand. Das gleiche, wenn ich so einen GPIO setzen will.

Ich habe auch das RPI_GPIO - Modul probiert, aber damit scheine ich nur auf dem FHEM-Raspi die GPIOs schalten zu können.

Kann mir jemand helfen ?

Danke im Voraus,

Grüße

Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Wernieman

Als welchen User probierst Du es und unter welchem User läuft fhem?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

cs-online

ähm, gute Frage... Also im Terminal bin ich immer als PI angemeldet. Wie bekomme ich heraus, unter welchem User FHEM läuft ? Fhem kann aber auch über SSH meine XIAOMIs auf dem ZeroW abfragen, daher dachte ich, das müßte doch so auch gehen oder ?
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Wzut

das system immer -1 zurückliefert ist normal und das Thema hatten wir hier die letzten zwei Monate schon mehrfach ....
Lösung :  qx ist dein Freund
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

cs-online

Es geht ja nicht nur um die Antwort, auch ein Schaltbegehl wird nicht ausgeführt.
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Wzut

Zitat von: cs-online am 09 September 2018, 14:39:44
ssh 'pi@FHEM-IP' gpio -g read 17

bekomme ich auch eine 1 oder 0, je nach Zustand. Soweit alles gut. Wenn ich aber in FHEM dies eingebe:

{system("ssh 'pi@192.168.2.21' gpio -g read 17")}
Im ersten Fall bist du vermutlich der User pi in der lokalen bash ?
Im zweiten Fall ist es aber IMHO der FHEM default User fhem , der jetzt eine ssh Sitzung startet !
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Otto123

Zitat von: cs-online am 09 September 2018, 15:02:24
ähm, gute Frage... Also im Terminal bin ich immer als PI angemeldet. Wie bekomme ich heraus, unter welchem User FHEM läuft ? Fhem kann aber auch über SSH meine XIAOMIs auf dem ZeroW abfragen, daher dachte ich, das müßte doch so auch gehen oder ?
Der Zero-W hat die IP 192.168.2.21 ?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cs-online

Zitat von: Otto123 am 09 September 2018, 22:07:45
Der Zero-W hat die IP 192.168.2.21 ?

Gruß Otto

Ja, das ist die IP vom Zero, also nicht dem wo FHEM drauf läuft. Und (auch wenn ich Paddel das wieder falsch geschrieben habe) ist auch bei dem hier

ssh 'pi@FHEM-IP' gpio -g read 17

die IP die 192.168.2.21. Also beide Male auf dem FHEM-Raspi eingegeben (einmal im Terminal mit Putty und einmal in die Befehlszeile oben im FHEM). Der FHEM-User hat aber extra für die Geschichte mit den XIAOMI Pflanzensensoren die Berechtigung für SSH auf dem Zero bekommen. Deshalb ist mir nicht so ganz klar, warum das nicht will....
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Otto123

Moin,

am einfachsten wirfst Du das in die Kommandozeile von FHEM:
"ssh 'pi@192.168.2.21' gpio -g read 17" und schaust mal was zurück kommt.

Wozu sind die ' ' in deinem Aufruf? Lass die mal weg, also zweiter Versuch dann so:
"ssh pi@192.168.2.21 gpio -g read 17"


Wenn Du dann einen Wert zurück haben willst, kannst Du auch so in der Kommandozeile testen:
{my $wert = qx 'ssh pi@192.168.2.21 gpio -g read 17'}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cs-online

Hallo Otto,

danke für die Hilfe !

Bei den ersten beiden wird nichts angezeigt, aber beim dritten kommt tatsächlich der richtige Wert raus. Wenn ich dann oben

"ssh pi@192.168.2.21 gpio -g write 17 0"

eingebe, wechselt die Anzeige bei dem dritten auch tatsächlich auf 0 :-)

dann kann ich mir in der Kommandozeile das {System(.... dann tatsächlich weglassen ? Und wenn ich das dann in einer Perl-Funktion aufrufen will, kann ich dann auch einfach

fhem("ssh pi@192.168.2.21 gpio -g read 17");

reinschreiben oder muss ich da noch was beachten ?

Grüße

Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Otto123

#10
Dass wäre dann: vor, zurück, zur Seite, ran.
;D ;D ;D
Aber auch falsch, da müssten doppelte "" hin

ZitatBei den ersten beiden wird nichts angezeigt, ...
Zumindest der zweite Befehl zeigt Dir zwar nichts im Browser, die Ausgabe landet im Log!
ZitatUnd wenn ich das dann in einer Perl-Funktion aufrufen will,
Was stört Dich an dem Perl Aufruf mit qx?
{my $wert = qx 'ssh pi@192.168.2.21 gpio -g read 17'}
https://commandref.fhem.de/commandref_DE.html#command

Zusammenfassung
1. Du brauchst den Perl Befehl system nicht, wenn Du in FHEM einen System Befehl aufrufen willst! Dann genügt "Befehl"
2. system() - ist die schlechteste Wahl (obwohl der Name schön klingt), denn der Befehl liefert keinen sinnvollen Wert sondern innerhalb von FHEM  nur -1 zurück.
2. In Perl würde ich immer qx() nehmen, der liefert Dir das Ergebnis zurück.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cs-online

Zitat von: Otto123 am 13 September 2018, 13:40:41
!Was stört Dich an dem Perl Aufruf mit qx?
{my $wert = qx 'ssh pi@192.168.2.21 gpio -g read 17'}

...um ehrlich zu sein kannte ich das bisher gar nicht (hab ich so noch nicht gebraucht), aber ich will das gerne mal ausprobieren, das gibt dann neue Möglichkeiten :-)

Dir erstmal vielen Dank, werde berichten, ob es bei mir läuft

Grüße

Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

cs-online

Hallo zusammen,

ich muss den Thread nochmal raus kramen... Das hat soweit super geklappt, ich kann damit z.B. in einem Notify die GPIOs setzen. Jetzt bastel ich mir gerade eine Bewässerung für mein Gewächshaus und habe da ein Ventil, das schaltet darüber, dass der GPIO eingeschaltet und wenige Sekunden später wieder ausgeschaltet werden muss. Sozusagen wie Taster drücken. Einschalten klappt, nur das Ausschalten über einen Timer will nicht klappen. So wie unten geschrieben kommt im Log kein Fehler, allerdings schaltet der GPIO nicht wieder aus... Wo kann der Fehler liegen ? oder gibt es noch andere Möglichkeiten, sozusagen mit Delay wieder auszuschalten ?


Wasserhahn:.* {
my $wert3 = 0;

my $wert2 = qx 'ssh pi@192.168.2.21 gpio -g write 17 1';

fhem("define tmp at +00:00:10 {$wert3 = qx 'ssh pi@192.168.2.21 gpio -g write 17 1';}");;
return 0;
}


so direkt aus der Edit-Ansicht heraus kopiert...

Hier die Ausgabe aus dem LOG:

2019.04.23 10:58:44 5: Triggering Gewaechshaus_Wasserhahn
2019.04.23 10:58:44 4: Gewaechshaus_Wasserhahn exec {
my $wert3 = 0;;

my $wert2 = qx 'ssh pi@192.168.2.21 gpio -g write 17 1';;

fhem("define tmp at +00:00:10 {$wert3 = qx 'ssh pi@192.168.2.21 gpio -g write 17 1';;}");;;;
return 0;;
}
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

Otto123

#13
Muss Du nicht zum Ausschalten eine 0 ausgeben?
Zitatgpio -g write 17 1
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Ich würde Dir empfehlen, es nicht über FHEM zu machen, sondern direkt auf dem 2. Pi, also beim Aufruf.

Denn dann kann währen dieser Zeit die Verbindung wegbrechen, FHEM einen "§Schluckauf" bekommen und der Ausschaltbefehl kommt trotzdem durch!

Wasserhahn:.* "ssh pi@192.168.2.21 taste.sh 17"

Und auf dem Pi ein Script namens taste.sh
#!/bin/bash
PORT=$1
gpio -g write $PORT 1
sleep 10
gpio -g write $PORT 0


Kleine Ergänzungen:
- Willst Du wirklich auf JEDES Event von Wasserhahn Trickern? Kann man das nicht noch mehr einschränken?
- qx ist blockierend, Du brauchst aber in Deinem Script nicht die Rückgabewerte
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html