Seite 1 von 1

Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 7. Feb 2019 10:01
von MichaelB
Hallo,

ich bin noch sehr neu in der Welt von openHAB und Hausautomatisierung. Ich habe bisher erst alle meine Geräte eingepflegt und versucht eine Regel zu erstellen welche alle Rolladen über einen Schalter Steuern soll. Der Code der Regel sieht wie folgt aus:

Code: Alles auswählen

rule "Gesamte Rolladen Steuerung"
when Item rolladenAlle received command // rolladenAlleEG ist der Schalter der für die Steuerung zuständig sein soll
then
	Rolladen_EG.members.forEach[ rs | 
       		rs.sendCommand(receivedCommand)
        Thread::sleep(100)
    	]
end
So nun zu meinem Problem, wenn ich dem Schalter den Befehl zum schließen gebe funktioniert dies auch Problemlos. Wenn ich nun dazu aber noch einen Stop Befehl gebe fahren die Rolladen immer ein Stück runter, bleiben stehen, fahren runter und immer so weiter.
Ich dachte es liegt vielleicht daran, dass der aufm dem Bus immer beide Befehle parallel gesendet werden und es daher zu diesem Phänomen kommt. Also habe ich versucht eine Absicherung zu "bauen" die es verhindern soll, dass ein weiterer Befehl gesendet wird solange der vorherige noch nicht beendet wurde. Meine Idee sah so aus:

Code: Alles auswählen

val frei = true
rule "Gesamte Rolladen Steuerung"
when Item rolladenAlle received command // rolladenAlleEG ist der Schalter der für die Steuerung zuständig sein soll
then
	if(frei){
		frei = false
		Rolladen_EG.members.forEach[ rs | 
        		rs.sendCommand(receivedCommand)
       		Thread::sleep(100)
    		]
    		frei = true
    	}
end
Als ich das ganze dann einmal getestet habe, habe ich damit gerechnet, dass die Rolladen bis zum Ende runterfahren bevor ich einen weiteren Befehl senden kann (z.B. STOP). Aber komischerweise wurde der STOP Befehl, als ich ihn gesendet habe auch ausgeführt. Diesmal sogar ohne Probleme.
Somit habe ich mein Problem selbst gelöst, habe aber immer noch die Frage wieso immer noch mehre Befehle gesendet werden können? Da die Variable "frei" nur dann wahr ist wenn die Regel einmal bis zum Ende ausgeführt wurde.

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 7. Feb 2019 14:24
von mamoel
Hier würde es sicherlich helfen, für die betroffenen Zeiträume in das Log zu schauen. Da siehst Du, wann welcher Befehl gesendet wird und auch wann welche Steuerung auf welchen Befehl gesetzt wird (inkl. Zeitstempel).

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 7. Feb 2019 14:46
von MichaelB
Ich müsste dann nochmal nachschauen ob ich es noch in den Logs finden kann. Nachstellen würde ich es ungerne da ich ein wenig Sorge um die Motoren in den Rolladen habe.

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 7. Feb 2019 14:49
von mamoel
Die Logs werden nicht gelöscht. Es sollte also kein Problem sein, die Stelle zu finden.

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 7. Feb 2019 18:13
von udo1toni
Du verwendest eine Konstante, (val -> Konstante) Du brauchst aber eine Variable (var), die Du verändern kannst.
Eigentlich sollte die Zuweisung eines Wertes an eine Konstante sogar eine Fehlermeldung erzeugen.
Zum erfolgreichen Sperren musst Du also nur einen Buchstaben ändern :)

Die Konstruktion mit members ist nur dann erforderlich, wenn es zu Timingproblemen kommt (meist wenn zu viele Items in einer Gruppe stecken, dann schickt openHAB zu viele Telegramme in kurzer Zeit. Ansonsten sollte es reichen, dne Befehl an die Gruppe zu senden:

Code: Alles auswählen

Rolladen_EG.sendCommand(receivedCommand)
Vorausgesetzt natürlich, alle beteiligten Items sind vom Typ Rollershutter (auch die Gruppe).
Die rule sähe üblicherweise dann so aus:

Code: Alles auswählen

var Boolean frei = true
rule "Gesamte Rolladen Steuerung"
when 
    Item rolladenAlle received command // rolladenAlleEG ist der Schalter der für die Steuerung zuständig sein soll
then
    if(frei){
        frei = false
        Rolladen_EG.members.forEach[ rs | 
            rs.sendCommand(receivedCommand)
            Thread::sleep(100)
        ]
        frei = true
    }
end

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 8. Feb 2019 09:18
von MichaelB
Danke für die Antwort
Alles klar gut zu wissen :D.
Mich wundert es, dass trotzdem alles erfolgreich durchläuft, auch wenn dort Dinge gemacht werden die so nicht funktionieren dürfen.
udo1toni hat geschrieben: 7. Feb 2019 18:13 Die Konstruktion mit members ist nur dann erforderlich, wenn es zu Timingproblemen kommt (meist wenn zu viele Items in einer Gruppe stecken, dann schickt openHAB zu viele Telegramme in kurzer Zeit.
Ich habe mal nachgezählt. In der Gruppe befinden sich 9 Items und die Gruppe besteht aus reinen rollershuttern. Muss ich das dann überhaupt per rule machen? Oder kann ich dies auch einfach über die Gruppe Rolladen_EG lösen wie z.B. auch bei einer Gruppe von Lichtschaltern?

Mit freundlichen Grüßen

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 8. Feb 2019 11:43
von udo1toni
MichaelB hat geschrieben: 8. Feb 2019 09:18 In der Gruppe befinden sich 9 Items und die Gruppe besteht aus reinen rollershuttern. Muss ich das dann überhaupt per rule machen?
Probiere es aus. Wenn es keine Probleme gibt (einzelne nicht fahrende Rollläden), kannst Du auf die Rule verzichten und stattdessen einfach das Group Item auf die Sitemap pappen, damit der Steuerbefehl direkt dorthin geht.

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 8. Feb 2019 15:51
von MichaelB
Gibt es denn die Möglichkeit dieses Steuerelement von rollershuttern (Welches man auf der Sitemap sehen kann) auch der Gruppe zuzuweisen?

Re: Alle KNX Rolladen sollen per Schalter gesteuert werden können

Verfasst: 8. Feb 2019 20:30
von udo1toni
Ja sicher, Du musst nur die Gruppe als Rollershutter definieren:

Code: Alles auswählen

Group:Rollershutter gShutter "Alle Läden"
und in der Sitemap

Code: Alles auswählen

Switch item=gShutter