Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

chris_007
Beiträge: 4
Registriert: 13. Nov 2017 18:02
Answers: 0

Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von chris_007 »

Hallo liebe Community!

Beschäftige mich jetzt nun seit 3 Tagen mit Openhab 2. Ich ziehe bald um und möchte in der neuen Wohnung gerne ein bischen "Automatisierung". Das dauert noch ein wenig aber ich habe mir gedacht ich kann ja schonmal etwas rumexperimentieren. Es ist komplizierter als erwartet :lol:

Zur Hardware:
Raspberry Pi 3 mit Openhabian
433 Mhz Funksteckdosen
433 Mhz Sender & Empfänger (Beide funktionieren, kann mit 2 Instanzen SSH ein Befehl senden und empfangen)

Nun zu meinem Problem mit diesem Exec-binding

Ich bekomm es einfach nicht auf die Reihe das ich die Funksteckdose über Openhab an und ausschalte. Habe mittlerweile alle Tutorials durch und ich schaffs einfach nicht :D
Die Steckdose lässt sich über die Console mit raspberry-remote einwandfrei an und ausschalten.

Kann mir bitte jemand eine funktionierende Things Items und Sitemap (und evtl script) zeigen so das ich verstehen kann was ich falsch mache?

Danke schonmal im vorraus

Benutzeravatar
seppy
Beiträge: 738
Registriert: 24. Sep 2015 20:25
Answers: 4
Wohnort: Bonn

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von seppy »

Hi,
schreib uns doch mal was Du schon gebaut hast. Grüne Wiese ist immer schwierig...
Grüße Seppy


Gesendet von iPhone mit Tapatalk
Homematic und HomematicIP über Raspberrymatic (RaspPi 4 4GB) mit 2x HMLAN. Steuerung und Visualisierung durch OpenHAB2 auf RaspPi in Hutschienengehäuse im Sicherungskasten. Rund 100 Aktoren/Sensoren

- Abgesichert durch APC USV
- Bewässerungssteuerung mit Hunter Magnetventilen (HM-LC-Sw4-DR)
- Beleuchtungssteuerung Innen und Aussen (HM-LC-Sw4-DR + HM-LC-SW1-FM + HMW-IO-12-SW7-DR)
- Rolladensteuerung mit Beschattungsautomatik über Temperaturdifferenzsensor (HM-LC-Bl1PBU-FM)
- Wetter und Unwetterinformationen von wunderground
- Benachrichtigung der Bewohner via Pushover
- Multimediawand und Dreambox Steuerung (HM-LC-SW1-FM)
- Heizungssteuerung mit Komfort und Energiesparfunktionen (HM-CC-RT-DN + HM-Sec-SC-2 + HMIP-eTRV-2)
- Werkstatt Kompressorsteuerung (HMW-IO-12-SW7-DR)
- Weihnachtsbeleuchtung außen
- Präsenzerkennung über Geolocation (iCloud Binding), iBeacon und WLAN (Unifi Binding)
- Philips HUE & Tasmota Devices (Tuya) Einbindung

chris_007
Beiträge: 4
Registriert: 13. Nov 2017 18:02
Answers: 0

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von chris_007 »

Habs jetzt mit einem weitern Tutorial lauffähig aber das is ja mal mega aufwendig. Geht das nicht einfacher? Lese immer was von einem alten exec-binding das wesentlicher einfacher aussieht. Kann man das verwenden? Wenn ja wie?Hab ich dadurch dann nachteile


Things

Code: Alles auswählen

Thing exec:command:Licht_Flur [command="/opt/raspberry-remote/send %2$s",interval=0, autorun=true]
Items

Code: Alles auswählen

//Licht Flur Anfang
Switch Licht_Flur <light>
Switch Licht_Flur_run {channel="exec:command:Licht_Flur:run"}
String Licht_Flur_Args {channel="exec:command:Licht_Flur:input"}
String Licht_Flur_Out {channel="exec:command:Licht_Flur:output"}
//Ende
Rules

Code: Alles auswählen

rule "Licht Flur"
	when
Item Licht_Flur received command
	then
if(receivedCommand == ON){
	Licht_Flur_Args.sendCommand("11111 1 1")
	}else{
		Licht_Flur_Args.sendCommand("11111 1 0")
}
//wait
while(Licht_Flur.state !=OFF){
	Thread::sleep(500)
}
end
Sitemap

Code: Alles auswählen

sitemap default label="Home"
{
	Frame label="Wohnung"
	{
	Switch item=Licht_Flur label="Licht Flur"
	}
	Frame label="Garage"
	{
	Switch item=Garage label="Garage" 
	}
}
Ignoriert bitte den Garage Switch bin natürlich am weiterbauen ;)

aprilia2003
Beiträge: 1
Registriert: 23. Nov 2017 14:48
Answers: 0

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von aprilia2003 »

Nabend
Habe deine Skripte bei mir mal eingetragen.
Im PaperUI bekomme ich es unter contol auch angezeigt aber leider lässt sich da nichts schalten.
Die 11111 1 usw habe ich natürlich ersetzt durch meine Adresse der Dosen.
Muss ich sonst noch irgendwas installieren um es zum laufen zu bekommen?

mfg Dennis

Thunder1973
Beiträge: 5
Registriert: 31. Mär 2018 19:59
Answers: 0

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von Thunder1973 »

Hallo Chris,

hast Du es hinbekommen?

Ic hstehe gerade vor dem selben Problem.
Kannst Du ggf. Deine Konfig posten?

Things
Items
Rules
etc?

Ich würde das dann entsprechend anpassen.
Das wäre echt klasse :-)

Benutzeravatar
Joe
Beiträge: 200
Registriert: 10. Okt 2018 12:22
Answers: 0
Wohnort: bei Mannheim

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von Joe »

Hi zusammen,
BINGO habe das selbe Problem, wäre auch an Things, Items und Rules interessiert.
VG
Joe

NicoH
Beiträge: 4
Registriert: 9. Nov 2018 14:28
Answers: 0

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von NicoH »

Gibt es hier schon neuigkeiten ? Habe das selbe Problem !

Habe einen Nanacul 433 mhz an USB01 hängen und komme nicht weiter :(

Benutzeravatar
webguards
Beiträge: 56
Registriert: 5. Jun 2018 17:06
Answers: 0

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von webguards »

Ich hab es einfach so gelöst
Virtueller Schalter (ohne Things)
items

Code: Alles auswählen

Switch	CasSW08	"3. Casa 08[%s]"	<wallswitch>	(gCasa,gNew)
rules

Code: Alles auswählen

rule	"08 Switch ON" 	 when Item CasSW08 received command ON   then  executeCommandLine("bash /etc/openhab2/scripts/casa.sh 08 ON") end
rule	"08 Switch OFF" when  Item CasSW08 received command OFF  then  executeCommandLine("bash /etc/openhab2/scripts/casa.sh 08 OFF") end
Die habe ich mit 20 Aktoren vervielfältigt
=== Das Kuriose an SMARTHOME, man wird nie fertig ;) ===

Thin Client HP als Multifunktionsserver (Docker) | 2x Echo Dot als SST und TTS | Fritzbox | FritzDect | KODI MediaCenter | Samsung TV und Samsung HTS | fireTV via adb | CasaControl mit 20 Aktoren via EXEC | Xiaomi Gateway mit mehrere Tür- und Temperatursensoren | Broadlink RM PRO | 80% regelbasiert Automatisiert

Benutzeravatar
udo1toni
Beiträge: 15244
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von udo1toni »

Viele Wege führen nach Rom... ;)

Grundsätzlich braucht man für einen Funkschalter ein Item. Mit dem exec Binding kann man es so drehen, dass der Zustand des Items von der Rückmeldung eines (zyklisch ausgeführen) Scripts gesetzt wird, während ein Schaltbefehl ein (anderes) Script aufruft. Dabei ist das exec2 Binding mächtiger als das exec1 Binding, dafür ist es leider auch grottig zu konfigurieren.

Wer das exec2 Binding verwenden will, kann es direkt installieren. Wer exec1 verwenden will, muss zuerst Legacy Bindings aktivieren, anschließend sollte exec1 in der Liste installierbarer Bindings auftauchen.

Das exec1 Binding wird direkt in der Item Definition konfiguriert, die Konfiguration muss zwingend über Textdatei erfolgen und sieht dann so aus:

Code: Alles auswählen

Switch mySwitch "Mein Exec Switch [%s]" {exec="<[<commandLine to execute>:<refreshintervalinmilliseconds>:(<transformationrule>)] >[ON:<commandLine to execute>] >[OFF:<commandLine to execute>]"}
Wahlweise kann man auch statt ON und OFF ein * mit angeben und muss dann halt im Aufruf einen Platzhalter verwenden, um den Befehl an das Script zu übergeben. Jeder der Parameter ist optional, man muss also nicht zwingend eine Rückmeldung abholen oder einen (oder mehrere) Schaltbefehl(e) senden.
Im vorliegenden Fall könnte man ein Item so definieren:

Code: Alles auswählen

Switch CasSW08 "3. Casa 08[%s]" <wallswitch> (gCasa,gNew) {exec=">[*:bash /etc/openhab2/scripts/casa.sh 08 %2$s]"}
Leider bekommt man aber keine Rückmeldung, es sei denn, man baut das im externen script extra ein und ruft es entsprechend auch extra auf. An dieser Stelle ist das exec2 Binding im Vorteil, denn es kann den Rückgabewert eines Scripts auswerten.
Damit das aber möglichst universell funktioniert, ist hier die Herangehensweise komplett anders.
Bei exec2 wird ein Thing definiert, das enthält das Script. Dazu gibt es definierte Channel, nämlich input, output, exit, run und lastexecution.
Über den input Channel wird der Parameter übergeben, mit dem das Script aufgerufen wird (natürlich kann man mehrere Parameter übergeben, man muss sie aber zuerst zu einem Parameter zusammenfassen, mit Leerzeichen als Trenner)
Über den Output Channel bekommt man die Ausgabe des letzten Aufrufs, falls das Script eine Ausgabe hatte.
Über Exit bekommt man den Exit-Status des letzten Aufrufs, allgemein ist 0 ein OK und alles ungleich 0 ein Fehler.
Mit dem run Channel wird das Script gestartet bzw. kontrolliert, ob es gerade läuft.
Mit dem lastexecution Channel schließlich bekommt man den Zeitstempel des letzten Aufrufs.

Man kann das Thing so konfigurieren, dass bei Update des input Channels automatisch ein run erfolgt, dann reicht es also, den Switch mit dem input Channel zu verlinken, und das Script wird jedesmal beim Betätigen des Switches entweder mit dem Parameter ON oder mit dem Parameter OFF aufgerufen.
Eines der Probleme dabei ist, dass der Input Channel vom Typ String ist, man kann also den Input Channel gar nicht direkt mit einem Switch Item verbinden. Die Rückmeldung kommt auf einem anderen Channel an, auch das verursacht eventuell Kopfschmerzen. Man wird vermutlich eine openHAB Rule verwenden, um ein ungebundenes Switch Item jeweils auf den korrekten Stand zu bringen (mit .postUpdate) und eine weitere Rule, um bei Betätigen des ungebundenen Items den Input zu setzen und gegebenenfalls auch den run-Befehl zu schicken.

Ich habe selbst bisher exec2 auch gemieden, wie der Teufel das Weihwasser :) aber grundsätzlich funktioniert das schon.

Die Alternative, das Ganze mit Rules und der executeCommandline Action zu erledigen, funktioniert natürlich auch, allerdings sollte man dann zumindest die Rule etwas eleganter gestalten.
Pro Schalter ein Item, die Namen sind dabei so gewählt, dass alle Items den Anfang ihres Namens mit einem _ von einer fortlaufenden Nummer trennen. Alle Items befinden sich in der Gruppe gCasa (der Name ist selbstverständlich frei wählbar), also etwa so:

Code: Alles auswählen

Group gCasa
Switch CasSW_08 "3. Casa 08[%s]" <wallswitch> (gCasa,gNew)
Switch CasSW_09 "4. Casa 09[%s]" <wallswitch> (gCasa,gNew)
Switch nochEiner_10 "5. Casa 10[%s]" <wallswitch> (gCasa)
und eine (1) Rule (!)

Code: Alles auswählen

rule "execute commandlines"
when
    Member of gCasa received command  // Member of gibt es seit OH2.3
then
                                                                 // triggeringItem gibt es schon länger, das Item, welches die Rule getriggert hat
    val String mySwitch = triggeringItem.name.split("_").get.(1) // es darf nur exakt ein _ vorkommen, dafür ist der Code simpel ;)
    val String myCommand = "bash /etc/openhab2/scripts/casa.sh " + mySwitch + " " + receivedCommand.toString
    executeCommandLine(myCommand)
end
Wahlweise kann man das auch auf eine (lange) Zeile bringen ;), der Punkt ist aber, man braucht nur diese eine Rule für alle gleich zu steuernden Funkschalter.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

littlekenny
Beiträge: 25
Registriert: 31. Mai 2018 02:49
Answers: 0

Re: Anfänger am verzweifeln, Funksteckdosen schalten/Exec Binding

Beitrag von littlekenny »

Ändere mal die Regel wie folgt ab:

Code: Alles auswählen

rule "Licht Flur"
	when
Item Licht_Flur changed
	then
if(Licht_Flur.state == ON) {
	Licht_Flur_Args.sendCommand('1') //Die 1 durch deinen Code ersetzten
	} else {
	Licht_Flur_Args.sendCommand('2') //Die 2 durch deinen Code ersetzten
}
//wait
while(Licht_Flur.state !=OFF) {
	Thread::sleep(500)
}

//Trigger execution
Licht_Flur.sendCommand('1')

//Logging
logInfo("Your Command Exec", "Result:" + Licht_Flur_Out.state)

end
Die Sitemap sollte dann so aussehen:

Code: Alles auswählen

Switch item=Licht_Flur      label="Licht Flur" mappings=["ON"="ON", "OFF"="OFF"]
Die items Datei so:

Code: Alles auswählen

Switch Licht_Flur "Licht Flur" <light> (PL_Steckdosen)
Switch Licht_Flur_run {channel="exec:command:Licht_Flur:run"}
String Licht_Flur_Args {channel="exec:command:Licht_Flur:input"}
String Licht_Flur_Out {channel="exec:command:Licht_Flur:output"}
die Things Datei:

Code: Alles auswählen

Thing exec:command:Licht_Flur "Licht Flur" [command="/opt/433Utils/RPi_utils/send %2$s", interval=0, autorun=true]
eventuell musst du den Pfad zur "codesend" Datei noch anpassen, wenn es bei dir woanders installiert ist!

Installiert habe ich das neue Exec Binding für 2.4.0

Damit läuft es bei mir ohne Probleme, nachdem ich die rule angepasst hatte.

Gruß, littlekenny

Antworten