Seite 1 von 1

GPIO per SSH als Switch

Verfasst: 18. Jan 2018 17:28
von Hille
Ist es möglich, auf einem anderen Raspi im lokalen Netz, ein GPIO als Switch zu schalten? Was problemlos funktioniert, ist das Ausführen per SSH eines entfernten BASH Scripts, welches den GPIO schaltet. Eventuell würde auch hier die Möglichkeit bestehen, solch ein Script per Switch auszuführen (mit entsprechenden Parametern für ein On und Off) z.B script.sh 0 für On und script.sh 1 für off.

Re: GPIO per SSH als Switch

Verfasst: 19. Jan 2018 01:01
von ibot1989
Verstehe deine Frage leider nicht ganz.

Möchtest du ein Item als Switch definieren und darüber auf einem entfernten PI via SSH ein Script für On und eins für Off ausführen, welches ein GPIO Pin ein-/ausschaltet?

Oder möchtest du an einem entfernten PI einen Switch/Schalter an einem GPIO Pin anschließen und diesen Status des Schalters in OpenHAB über ein Script via SSH Abfragen?

Gruß iBot

Gesendet von meinem ONE A2003 mit Tapatalk


Re: GPIO per SSH als Switch

Verfasst: 20. Jan 2018 11:42
von Hille
Ich möchte ein Item als Switch, welches per SSH einen GPIO ein bzw ausschalten kann.
Ich habe das nun mittlerweile per rules und einem Bash Script gelöst bekommen.

Item

Code: Alles auswählen

Switch heizung "Heizung" <heating> { gpio="pin:27 activelow:yes initialValue:high" }
heizung.sh

Code: Alles auswählen

#!/bin/bash
/usr/bin/ssh -i /home/openhab/.ssh/id_ed25519 openhab@pi1.local "sudo /bin/bash /script/openhab_heizung.sh $1"
heizung.rules

Code: Alles auswählen

rule "Heizung"

when
Item heizung changed to ON

then
executeCommandLine("bash /etc/openhab2/scripts/heizung.sh 0")
Thread::sleep(3600000)
sendCommand(heizung, OFF)
executeCommandLine("bash /etc/openhab2/scripts/heizung.sh 1")
end

rule "Heizung_off"

when
Item heizung changed to OFF

then
executeCommandLine("bash /etc/openhab2/scripts/heizung.sh 1")
end

Re: GPIO per SSH als Switch

Verfasst: 21. Jan 2018 15:13
von ibot1989
Hallo Hille,

bei mir habe ich SSH Scripte um 433 MHz Steckdosen zu schalten, der Sender hängt an einem entfernen PI, auf den ich mich via SSH Verbinde.
Meine Lösung sieht wie folgt aus, vllt hilft es dir ja noch zu optimieren:

Code: Alles auswählen

Thing exec:command:wohnzimmer_mediatv_strom_ein			"Wohnzimmer MediaTV Strom Ein" @ "Wohnzimmer"		[command="/srv/openhab_scripts/funksteckdosen_schalten.sh 11101 A ON", interval=0, timeout=10]
Thing exec:command:wohnzimmer_mediatv_strom_aus			"Wohnzimmer MediaTV Strom Aus" @ "Wohnzimmer"		[command="/srv/openhab_scripts/funksteckdosen_schalten.sh 11101 A OFF", interval=0, timeout=10]
Es gibt also zwei Exec Things, einmal ein und einmal aus, hier liegt ein SSH Script hinter, welches auf dem PI ausgeführt wird auf dem OpenHAB läuft, in diesem Script wird dann entsprechend eine SSH Verbindung zum externen PI aufgebaut und dort das Script zum Senden ausgeführt.

Code: Alles auswählen

Switch Wohnzimmer_mediatv_Strom				"Wohnzimmer MediaTV Strom"
Switch Wohnzimmer_mediatv_Strom_ein_RUN		"Wohnzimmer MediaTV Strom EIN"		{ channel="exec:command:wohnzimmer_mediatv_strom_ein:run" }
Switch Wohnzimmer_mediatv_Strom_aus_RUN		"Wohnzimmer MediaTV Strom AUS"		{ channel="exec:command:wohnzimmer_mediatv_strom_aus:run" }
In der Item Definition gibt es dann 3 Items.
1. Switch für die Darstellung des aktuellen Zustandes und zum antriggern der Items zum wirklichen schalten via Exec Binding
2. Switch fürs Einschalten via Exec
3. Switch fürs Ausschalten via Exec


Und dazu gibt es dann eine Rule die das ganze entsprechend umsetzt:

Code: Alles auswählen

/* Media Strom Exec Rules */
rule "Wohnzimmer Media Strom - Ein"
when
    Item Wohnzimmer_Media_Strom changed from OFF to ON
then
	Wohnzimmer_mediatv_Strom_ein_RUN.sendCommand(OFF)
end

rule "Wohnzimmer Media Strom - Aus"
when
    Item Wohnzimmer_Media_Strom changed from ON to OFF
then
	Wohnzimmer_mediatv_Strom_aus_RUN.sendCommand(OFF)
end
Gruß iBot