Seite 1 von 1
Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 21. Nov 2022 23:33
von dasc4711
Hallo Zusammen,
ich bin schon seit einiger Zeit treuer "Mitleser", konnte nun aber keine Antowort zu meinem Problem finden.
Ich habe zushause ein KNX-Netzwerk und möchte nun Fensterkontakte so einbetten, dass ich darauf meine Heizung in den Räumen verändern kann.
Leider scheiter ich schon an der Erkennung "gekippt", "offen" "geschlossen"
Ich habe ein EnOcean KNX 626 Gateway - Daran habe ich meine Fenstserkontakte von Eltako (FFG7B) dran. Diese sind auf 4BS - Gerätetyp A5-14-09 offen/geschlossen/gekippt.
Nun senden die Fensterkontakte mit dem Datentyp 1.002 Boolesch auf 2 Kanälen jeweils true/false
Ich bekomme folgende Werte
bei geöffnetem Fenster Kanal 1 = 1 Kanal 2 = 1
bei gekipptem Fenster Kanal 1 = 1 Kanal 2 = 0
bei geschlossenem Fenster Kanal 1 = 0 Kanal 2 = 0
Somit muss ich quasi 2 Gruppenadressen auswerten und und daraus erkennen, wann ein Fenster welchen Zusatand hat. Grundsätzlich könnte ich das auch machen, aber ich habe dann ja 2 Objekte (Fenster Offen/geschlossen, egal ob gekippt oder ganz offen - und Fenster gekippt, Ja/Nein)
Aktuell habe ich für beide Zustände je ein Channel als Contact und je einem Item angelegt - das ist nicht sonderlich cool
Bevor ich den Zustand nicht habe, kann ich ja auch nicht meinen Sollwert der Heizung zielsicher beinflussen - Besten Dank schon mal und ich hoffe, ich habe es einigermaßen verständlich formuliert

Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 22. Nov 2022 00:16
von udo1toni
Nun ja, für die Heizung ist nur interessant, ob Kanal 1 1 oder 0 ist (das dürfte auch der Grund sein, warum die Kanäle so definiert sind... Kanal 1 gibt Auskunft ob offen oder geschlossen, Kanal 2 gibt an, ob gekippt oder vollständig offen., für die Heizungsfrage musst Du aber nur Kanal 1 auswerten.
Solange Du nicht mehrere Fenster in einem Raum auswerten musst, müsste das also komplett in knx gehen, denn normale RTR werten eine 1 am Fenster-Kommunikationsobjekt als offen und schalten sofort auf Frostschutz.
Ansonsten kannst Du das natürlich auch getrennt in openHAB einsammeln, auswerten und ein extra Item für die Steuerung übertragen, aber ja, das scheint nicht sehr elegant. Nur steht die Information ja nur über die zwei GA zur Verfügung, es sei denn, Du nutzt zusätzlich noch ein weiteres EnOcean Gateway, wo Du die Daten direkt und ohne Umweg über knx einsammeln kannst...
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 22. Nov 2022 00:24
von dasc4711
OK - das stimmt!
dann konkretisiere ich meine Frage etwas - Ich möchte im OpenHab natürlich den Status des Fensters sehen.
Aktuell versuche ich mich an ein paar Regeln, die den Status auswerten und in einen String schreiben. Dieser soll dann 3 Status haben und wiederrum in der Sitemap alles anzeigen - Schon eine Lösung, aber ich dachte, dass ich direkt 2 Werte miteinander auswerten kann...
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 22. Nov 2022 01:20
von udo1toni
Ja, in openHAB musst Du leider damit leben, dass die Daten über zwei Channel im System landen. Zum verarbeiten der beiden Channel zu einem Item brauchst Du leider zwei weitere Items. Einziger Trost: Wenn Du mehrere solche Kontaktpaare hast, kannst Du die Umsetzung recht einfach über eine einzige Rule umsetzen, dafür müssen die Items halt einer Namenskonvention entsprechen.
Nehmen wir an, die Kontakt-Items heißen FensterX_y. Alle Items, die zu einem Fenster gehören, haben den identischen Namensteil FensterX_ Y wiederum ist identisch für alle Kanäle 1, für alle Kanäle 2 und für die Items, in denen der gesamte Fensterstatus ausgegeben wird.
Nehmen wir als Schlüsselworte open (Kanal1), ajar (Kanal2) und display (String Item, welches in openHAB angezeigt wird)
Wir benötigen noch ein Group Item gFensterkontakte, in der alle Items enthalten sind. Nun noch eine Regel:
Code: Alles auswählen
rule "Fensterkontakte auswerten"
when
Member of gFensterkontakte changed
then
if(triggeringItem.name.split("_").get(1) == "display") // rule wurde durch sich selbst getriggert, Abbruch
return;
val strFenster = triggeringItem.name.split("_").get(0) // Welches Fenster war es?
val itemGroup = gFensterkontakte.members.filter[i|i.name.startsWith(strFenster)] // filtere alle zugehörigen Items aus der Liste
val itemOpen = itemGroup.filter[i|i.name.endsWith("open")].head // Das Item von Kanal 1
val itemAjar = itemGroup.filter[i|i.name.endsWith("ajar")].head // Das Item von Kanal 2
val itemDisp = itemGroup.filter[i|i.name.endsWith("display")].head // Das Item welches die Zustände kombiniert
var strText = "CLOSED" // Default ist der Zustand zu
if(itemOpen.state == OPEN) { // Falls geöffnet
if(itemAjar.state == OPEN) // Fenster komplett offen?
strText = "OPEN" // Ändere Zustand auf offen
else // ansonsten
strText = "AJAR" // Ändere Zustand auf gekippt
}
itemDisp.postUpdate(strText) // schreibe neuen Zustand ins Item
end
String Item, weil Du dann als Icon "window" setzen kannst und das Aussehen automatisch die drei Zustände anzeigen sollte.
Es ist egal, wie viele Fensterkontakte es sind, Du brauchst nur eine Gruppe und eine Rule für alle, solange die Namenskonvention eingehalten wird. (Die ist im übrigen willkürlich, die Rule muss nur entsprechend programmiert sein).
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 28. Nov 2022 20:41
von dasc4711
Sorry für die späte Antwort - Mit Kids und Job ist es für mich aktuell nicht einfach, täglich an dem "Projekt" zu arbeiten
Ich verstehe zwar die Regel und muss sagen, echt gute Idee - Aber wie bekomme ich die in eine Regel verpackt? Wenn ich über die GUI eine Regel anlegen möchte, und dann auf "code" gehe, sieht das ganz anders aus - Wenn ich deinen Code dort hinterlege und speichere, tut sich garnichts ...
Binde ich die Condition, erscheint diese im Code ebenfalls ganz anders formatiert - Sorry für die blöde Frage - OpenHab bin ich noch nicht richtig drin, grob scripte lesen und verstehen bzw. If / Else bzw. allgemein Schleifen usw. verstehe ich schon

Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 28. Nov 2022 22:55
von udo1toni
Wenn Du das über die GUI machen willst, ist das kein Problem.
Name der Rule wie es beliebt, ich habe sie Fensterkontakte auswerten genannt, das wäre das Label in der GUI. Als UID solltest Du auch etwas sinnvolleres als eine wilde Zahlen-Buchstabenkombination setzen, falls es mal zu Fehlermeldungen kommt, dient die UID als Anhaltspunkt.
Der when- Teil beschreibt exakt das, was auch in der GUI als when Teil angegeben wird. Es handelt sich um ein Item Event. Du wählst das passende Item aus (ein Group Item) und klickst auf Pick. Anschließend wählst Du "had a member change" (Member of ... changed)
Der Teil zwischen then und end (das heißt: ohne diese beiden Schlüsselworte) ist der auszuführende Code.
Es handelt sich dabei um DSL Code. Das heißt, Du musst als Action Run Script -> Rule DSL auswählen. Im Anschluss öffnet sich ein Code-Fenster, in das Du den Code einfügst.
Da der Gruppenname in der Rule selbst verwendet wird, muss das passen. Sollte Deine Gruppe also anders heißen als gFensterkontakte, so musst Du innerhalb des Rule Codes exakt diesen Namen mit dem "richtigen" Group Item Namen ersetzen.
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 28. Nov 2022 23:37
von dasc4711
OK - Funktioniert irgendwie nicht ...
Ich habe 1 Thing - Das heißt "Fensterstatus"
Dann habe ich mehrere Channels FensterBad_open; FensterBad_ajar
Dazu habe ich jeweils 1 Item mit den selben Namen (jeweils Typ Contract)
Ein weiteres Item mit dem Namen FensterBad_display als Sting
Die Item sind alle in der Gruppe alle_Fensterkontakte
Mein Scipt habe ich entpstrechend angepasst
if(triggeringItem.name.split("_").get(1) == "display") // rule wurde durch sich selbst getriggert, Abbruch
return;
val strFenster = triggeringItem.name.split("_").get(0) // Welches Fenster war es?
val itemGroup = alle_Fensterkontakte.members.filter[i|i.name.startsWith(strFenster)] // filtere alle zugehörigen Items aus der Liste
val itemOpen = itemGroup.filter[i|i.name.endsWith("open")].head // Das Item von Kanal 1
val itemAjar = itemGroup.filter[i|i.name.endsWith("ajar")].head // Das Item von Kanal 2
val itemDisp = itemGroup.filter[i|i.name.endsWith("display")].head // Das Item welches die Zustände kombiniert
var strText = "CLOSED" // Default ist der Zustand zu
if(itemOpen.state == OPEN) { // Falls geöffnet
if(itemAjar.state == OPEN) // Fenster komplett offen?
strText = "OPEN" // Ändere Zustand auf offen
else // ansonsten
strText = "AJAR" // Ändere Zustand auf gekippt
}
itemDisp.postUpdate(strText) // schreibe neuen Zustand ins Item
Der Status wird in das Display-Objekt leider nicht geschrieben
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 29. Nov 2022 00:04
von udo1toni
Also, ich habe das gerade hier mal im Testsystem nachvollzogen... funktioniert einwandfrei...
Hier mal die Code-Ansicht:
Code: Alles auswählen
configuration: {}
triggers:
- id: "1"
configuration:
groupName: gFensterkontakte
type: core.GroupStateChangeTrigger
conditions: []
actions:
- inputs: {}
id: "2"
configuration:
type: application/vnd.openhab.dsl.rule
script: >-
if(triggeringItem.name.split("_").get(1) ==
"display") // rule wurde durch sich selbst
getriggert, Abbruch
return;
val strFenster = triggeringItem.name.split("_").get(0) // Welches Fenster war es?
val itemGroup = gFensterkontakte.members.filter[i|i.name.startsWith(strFenster)] // filtere alle zugehörigen Items aus der Liste
val itemOpen = itemGroup.filter[i|i.name.endsWith("open")].head // Das Item von Kanal 1
val itemAjar = itemGroup.filter[i|i.name.endsWith("ajar")].head // Das Item von Kanal 2
val itemDisp = itemGroup.filter[i|i.name.endsWith("display")].head // Das Item welches die Zustände kombiniert
var strText = "CLOSED" // Default ist der Zustand zu
if(itemOpen.state == OPEN) { // Falls geöffnet
if(itemAjar.state == OPEN) // Fenster komplett offen?
strText = "AJAR" // Ändere Zustand auf offen
else // ansonsten
strText = "OPEN" // Ändere Zustand auf gekippt
}
itemDisp.postUpdate(strText) // schreibe neuen Zustand ins Item
type: script.ScriptAction
Ich habe lediglich die Strings ausgetauscht, in der Annahme, dass bei Ajar beide Kontakte OPEN melden, aber das ist ja nur eine Frage der Definition...)
EDIT:
Ach so... was tatsächlich NICHT funktioniert, ist das Fenstersymbol auf gekippt. Da scheint es einen Bug zu geben, denn das hat definitiv mal exakt so funktioniert und es gibt auch diverse Anleitungen im englischen Forum, die es genau so beschreiben.
EDIT2: Aber auf einer Label Card funktioniert auch das Icon korrekt.
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 29. Nov 2022 21:12
von dasc4711
Funktioniert bei mir leider immer noch nicht
2022-11-29 21:10:53.094 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'fensterkontakte_auswerten' failed: cannot invoke method public abstract java.lang.String org.openhab.core.items.Item.getName() on null
Re: Fensterkontakt Eltako FFG7B Status gekippt
Verfasst: 29. Nov 2022 23:24
von udo1toni
Der Fehler bedeutet, dass an einer Stelle, an der der Name eines Items ermittelt werden soll, kein Item vorhanden ist.
Die Rule wird auch durch den korrekten Trigger ausgelöst? Siehe Codeblock, das ist die komplette Rule, wenn man sie über die UI erstellt.