433 MHZ Steckdosen per Rule steuern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Aienka
Beiträge: 5
Registriert: 3. Dez 2019 17:17

433 MHZ Steckdosen per Rule steuern

Beitrag von Aienka »

Moin,

ich habe nun schon einiges hier im Forum gelesen un vieles hat für das Verständnis gut geholfen.
Ich habe mit einigen Anleitungen nun meine 433 Mhz Funksteckdosen zum Laufen bekommen.

Als Erstes ist der Plan die Funksteckdosen per Rule(Zeitschaltuhr) zu steuern.

Ich packe euch mal das Item, Thing, Sitemaps und die Rule hier rein. Denn mein Problem ist das mit der Rule die Funksteckdosen nicht geschaltet werden. Irgendwie habe ich wohl die Syntax verhauen.

Code: Alles auswählen

Thing exec:command:poweroutletD-control [ command="/opt/433Utils/RPi_utils/run.sh D %2$s", interval=0, autorun=true ]
Thing exec:command:poweroutletD-control2 [ command="/opt/433Utils/RPi_utils/run2.sh C %2$s", interval=0, autorun=true ]
Thing exec:command:poweroutletD-control3 [ command="/opt/433Utils/RPi_utils/run3.sh B %2$s", interval=0, autorun=true ]

Code: Alles auswählen

Group grp_poweroutlets "Funksteckdosen Gruppe" <poweroutlet>

String poweroutletDSwitch "Funksteckdose 1" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletD-control:input", autoupdate="true" }
String poweroutletDSwitch2 "Funksteckdose 2" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletD-control2:input", autoupdate="true" }
String poweroutletDSwitch3 "Funksteckdose 3" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletD-control3:input", autoupdate="true" }

Code: Alles auswählen

sitemap poweroutlets label="Funksteckdosen" {
    Frame label="Funksteckdosen Gruppe" {
        Switch item=poweroutletDSwitch //mappings=[ "ON"="ON", "OFF"="OFF" ]
        Switch item=poweroutletDSwitch2 //mappings=[ "ON"="ON", "OFF"="OFF" ]
        Switch item=poweroutletDSwitch3 //mappings=[ "ON"="ON", "OFF"="OFF" ]
    }
}    

Code: Alles auswählen

rule "Zeitschaltuhr-Weihnachtssterne"

when
Time cron "0 18 14 ? * *" //Die Uhrzeit ist zum testen gewesen.
then
sendcommand(poweroutletDSwitch, ON)
end 



Im nächsten Schritt möchte ich die Steckdosen und weitere Items in HomeKit integrieren. Leider verbindet sich mein iPhone schon nicht mit dem Gateway. Vielleicht habt ihr da ein paar Tipps, denn egal welche Anleitung ich dafür gefunden habe, bis her hat nichts funktioniert.

Hier nochmal meine HomeKit.cfg

Code: Alles auswählen

org.openhab.homekit:port=9124
org.openhab.homekit:pin=094-27-192
org.openhab.homekit:useFahrenheitTemperature=false
org.openhab.homekit:thermostatCoolMode=MANU_MODE
org.openhab.homekit:thermostatHeatMode=MANU_MODE
org.openhab.homekit:thermostatAutoMode=AUTO_MODE
org.openhab.homekit:thermostatOffMode=AUTO_MODE
org.openhab.homekit:networkInterface=<192.168.0.94>
org.openhab.homekit:name=openHAB
org.openhab.homekit:minimumTemperature=-100
org.openhab.homekit:maximumTemperature=100

Danke schon mal für die Hilfe.

Viele Grüße
Aienka / EIko

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

Re: 433 MHZ Steckdosen per Rule steuern

Beitrag von udo1toni »

Gehe Schritt für Schritt vor. Erstmal das erste Problem lösen, dann das nächste Problem.

Was macht das run.sh Script? Warum hast Du drei verschiedene Scripte (run.sh, run2.sh und run3.sh) und parallel dazu noch einen Parameter (B, C, D) zur Auswahl der Steckdosen?

Baue testweise in das Script run.sh einen Befehl ein, der Dir ausgibt, ob das Script korrekt angesteuert wird. (ganz vorne...)

Code: Alles auswählen

echo `date` $1 $2 >> /tmp/socket.log
(Die Zeile ist jetzt aus dem Kopf... vielleicht ist da noch ein Fehler drin)
Du solltest je Aufruf in der Datei /tmp/socket.log eine Zeile mit Datumsstempel und den übergebenen Parametern finden.

autoupdate="true" ist der default Value, das ist also eher sinnlos.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Aienka
Beiträge: 5
Registriert: 3. Dez 2019 17:17

Re: 433 MHZ Steckdosen per Rule steuern

Beitrag von Aienka »

Ich habe nun mal das/die Script(e) angepasst, habe nun ein Script mit den 3 Steckdosen.
Nutze also den Parameter zur Steuerung der Steckdosen. hier nun der Code der run.sh, usw.

run.sh

Code: Alles auswählen

#!/bin/sh
if [ "$1" = "D" ]; then
    if [ "$2" = "off" ] || [ "$2" = "0" ] || [ "$2" = "OFF" ]; then
        /opt/433Utils/RPi_utils/codesend 1381716
    else
        /opt/433Utils/RPi_utils/codesend 1381717
    fi
fi
if [ "$1" = "C" ]; then
    if [ "$2" = "off" ] || [ "$2" = "0" ] || [ "$2" = "OFF" ]; then
        /opt/433Utils/RPi_utils/codesend 1394004
    else
        /opt/433Utils/RPi_utils/codesend 1394005
    fi
fi
if [ "$1" = "B" ]; then
    if [ "$2" = "off" ] || [ "$2" = "0" ] || [ "$2" = "OFF" ]; then
        /opt/433Utils/RPi_utils/codesend 1397076
    else
        /opt/433Utils/RPi_utils/codesend 1397077
    fi
fi
things

Code: Alles auswählen

//Funksteckdosen
Thing exec:command:poweroutletD-control [ command="/opt/433Utils/RPi_utils/run.sh D %2$s", interval=0, autorun=true ] //Arbeitszimmer
Thing exec:command:poweroutletC-control [ command="/opt/433Utils/RPi_utils/run.sh C %2$s", interval=0, autorun=true ] //Wohnzimmer Radio
Thing exec:command:poweroutletB-control [ command="/opt/433Utils/RPi_utils/run.sh B %2$s", interval=0, autorun=true ] //Wohnzimmer Fenster
items

Code: Alles auswählen

Group grp_poweroutlets "Funksteckdosen Gruppe" <poweroutlet>
String poweroutletDSwitch "FSD Arbeitszimmer Fenster" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletD-control:input", autoupdate="true" }
String poweroutletCSwitch "FSD Wohnzimmer Radio" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletC-control:input", autoupdate="true" }
String poweroutletBSwitch "FSD Wohnzimmer Fenster" <poweroutlet> (grp_poweroutlets) [ "Switchable" ] { channel="exec:command:poweroutletB-control:input", autoupdate="true" }

sitemap

Code: Alles auswählen

sitemap poweroutlets label="Funksteckdosen" {
    Frame label="Funksteckdosen Gruppe" {
        Switch item=poweroutletDSwitch //mappings=[ "ON"="ON", "OFF"="OFF" ]
        Switch item=poweroutletCSwitch //mappings=[ "ON"="ON", "OFF"="OFF" ]
        Switch item=poweroutletBSwitch //mappings=[ "ON"="ON", "OFF"="OFF" ]
    }
}    

Aienka
Beiträge: 5
Registriert: 3. Dez 2019 17:17

Re: 433 MHZ Steckdosen per Rule steuern

Beitrag von Aienka »

So ich habe die Rule hinbekommen, habe die unschönen Sachen "repariert".

Meine Rules sehen aktuell noch sehr unschön aus, würde diese gerne eine etwas schönere SChreibform bringen.
Mit z.B. Timeouts, denn der 433Mhz Sender kann zur gleichen Zeit nicht alle 3 Schalten.

Ich packe euch den laufenden Code mal mit rein. Danke schonmal.

Code: Alles auswählen

rule "Zeitschaltuhr-SteckdoseD-AN"
when
Time cron "0 41 14 ? * *" 
then
 poweroutletDSwitch.sendCommand("ON") 
end 

rule "Zeitschaltuhr-SteckdoseC-AN"
when
Time cron "05 41 14 ? * *" 
then
 poweroutletCSwitch.sendCommand("ON")
end

rule "Zeitschaltuhr-SteckdoseB-AN"
when
Time cron "10 41 14 ? * *" 
then
 poweroutletBSwitch.sendCommand("ON")
end 

rule "Zeitschaltuhr-SteckdoseD-AUS"
when
Time cron "0 42 14 ? * *"
then
 poweroutletDSwitch.sendCommand("OFF")
end

rule "Zeitschaltuhr-SteckdoseC-AUS"
when
Time cron "05 42 14 ? * *"
then
  poweroutletCSwitch.sendCommand("OFF")
end

rule "Zeitschaltuhr-SteckdoseB-AUS"
when
Time cron "10 42 14 ? * *"
then
  poweroutletBSwitch.sendCommand("OFF")
end

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

Re: 433 MHZ Steckdosen per Rule steuern

Beitrag von udo1toni »

Sollen immer alle drei Steckdosen gemeinsam geschaltet werden? Eine "saubere" Lösung sähe z.B. so aus:

Items:

Code: Alles auswählen

Group:Switch poweroutlets
Switch poweroutletSwitch_D (poweroutlets)
Switch poweroutletSwitch_C (poweroutlets)
Switch poweroutletSwitch_B (poweroutlets)
rules:

Code: Alles auswählen

// Globale Variablen zu Beginn der Datei definieren!
var Timer tFunk = null
var sSoll = OFF

rule "Funksteuerung ON"
when
    Time cron "0 41 14 ? * *" 
then
    tFunk?.cancel
    sSoll = ON
    tFunk = createTimer(now.plusMillis(100),[|
        poweroutlets.members.filter[i|i.state != sSoll].head.sendCommand(sSoll)
        if(poweroutlets.members.filter[i|i.state != sSoll].size > 0)
            tFunk.reschedule(now.plusSeconds(5))
        else
            tFunk = null
    ])
end

rule "Funksteuerung OFF"
when
    Time cron "0 42 14 ? * *" 
then
    tFunk?.cancel
    sSoll = OFF
    tFunk = createTimer(now.plusMillis(100),[|
        poweroutlets.members.filter[i|i.state != sSoll].head.sendCommand(sSoll)
        if(poweroutlets.members.filter[i|i.state != sSoll].size > 0)
            tFunk.reschedule(now.plusSeconds(5))
        else
            tFunk = null
    ])
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten