Seite 1 von 1

Fenster-Status einer Gruppe wird falsch angezeigt

Verfasst: 7. Okt 2021 11:45
von terler
Hallo zusammen,

folgendes Szenario bietet sich mir aktuell: Der Fenster-Status aus einer Gruppe kommt in Openhab verkehrt herum an. Heißt, wenn ein Fenster offen ist, wird die Gruppe als geschlossen angezeigt. Dies gilt sowohl für Gruppen mit einem Fenster, als auch für Gruppen mit mehreren Fenstern. Wenn ich mir den Status über den Kontakt direkt anzeigen lasse, funktioniert es einwandfrei.

Ich habe folgende Konfiguration:
Openhab 3.1.0 auf einem Ubuntu
Raspberrymatic 3.59.6.20210911 auf einem RPI3 (CCU3-Charly) (August-Update hat das gleiche Problem)

schlafzimmer.items
Contact O_Sch_Heizung_Gruppe_Fenster "Fenster [%s]" { channel="homematic:HM-CC-VG-1:XXX:INT0000002:2#STATE" }
Contact O_Sch_Kontakt1 "Schlafzimmer-Fenster [%s]" { channel="homematic:HM-Sec-SCo:XXX:YYY:1#STATE" }

Die jeweiligen UIDs der Channels sind aus der Openhab-Oberfläche entnommen.

heizung.sitemaps
Default item=O_Sch_Heizung_Gruppe_Fenster
Default item=O_Sch_Kontakt1

O_Sch_Kontakt1 wird korrekt angezeigt und O_Sch_Heizung_Gruppe_Fenster verkehrt rum. In Homematic werden beide Elemente als offen oder geschlossen angezeigt.

Ich habe mir dazu auch ein kleine Debug-Rule geschrieben, die bei Veränderung den Status ausgibt. Ergebnis:

2021-10-07 08:54:01.960 [INFO ] [org.openhab.core.model.script.Gruppe] - CLOSED
2021-10-07 08:54:01.960 [INFO ] [org.openhab.core.model.script.Einzel] - OPEN

Ist euch dieses Phänomen auch einmal unter gekommen?

Viele Grüße
Timo

Folgendes hatte ich im Internet ohne wirkliche Lösung gefunden: https://homematic-forum.de/forum/viewtopic.php?t=39085

Re: Fenster-Status einer Gruppe wird falsch angezeigt

Verfasst: 7. Okt 2021 18:15
von terler
Hallo zusammen,

ich habe mir einmal den Quellcode des Java-Addons angeguckt und den Fehler gefunden. Das Addon invertiert alle Status, wenn sie nicht von einem Sensor oder Status-Gerät (z.B. Kontakt) kommen. Die virtuelle Gruppe ist nicht in der Liste der Status-Geräte aufgeführt. Diese habe ich ergänzt. Nun funktioniert auch der Status-Kanal der Heizungs-Gruppe. Ich werde es noch bei github als Pull- oder Feature-Request einbringen.

Wer mit dem anpassen von Java-Code geübt ist, kann die folgenden Schritte selbst übernehmen. Ich übernehme allerdings keine Garantie. Macht ein Backup zuvor und testet es separat. Ich habe mir kurzerhand eine Test-Instanz aufgesetzt.

Ich habe die folgenden Klassen angepasst:

org.openhab.binding.homematic.internal.misc.HomematicConstants

Code: Alles auswählen

    public static final String DEVICE_TYPE_SHUTTER_CONTACT = "HM-Sec-SC";
    public static final String DEVICE_TYPE_SHUTTER_CONTACT_2 = "ZEL-STG-RM-FFK";
    public static final String DEVICE_TYPE_SHUTTER_CONTACT_GROUP = "HM-CC-VG";
    public static final String DEVICE_TYPE_INCLINATION_SENSOR = "HM-Sec-TiS";
    public static final String DEVICE_TYPE_WIRED_IO_MODULE = "HMW-IO-12-Sw14-DR";
    public static final String DEVICE_TYPE_MAX_WINDOW_SENSOR = "BC-SC-Rd-WM";
    public static final String DEVICE_TYPE_SHUTTER_CONTACT_INTERFACE = "HM-SCI-3-FM";
Hier habe ich eine Konstante für die virtuelle Gruppe angelegt: DEVICE_TYPE_SHUTTER_CONTACT_GROUP = "HM-CC-VG"

org.openhab.binding.homematic.internal.converter.type.AbstractTypeConverter

Code: Alles auswählen

public abstract class AbstractTypeConverter<T extends State> implements TypeConverter<T> {
    private final Logger logger = LoggerFactory.getLogger(AbstractTypeConverter.class);

    /**
     * Defines all devices where the state datapoint must be inverted.
     */
    private static final List<StateInvertInfo> stateInvertDevices = new ArrayList<>(3);

    static {
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_SHUTTER_CONTACT));
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_SHUTTER_CONTACT_2));
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_INCLINATION_SENSOR));
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_WIRED_IO_MODULE, 15, 26));
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_MAX_WINDOW_SENSOR));
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_SHUTTER_CONTACT_INTERFACE));
        stateInvertDevices.add(new StateInvertInfo(DEVICE_TYPE_SHUTTER_CONTACT_GROUP));
    }
Hier habe ich den Geräte-Typ der Liste von State-Geräten hinzugefügt. Letzte Zeile.

Das aktuelle homematic-Addon habe ich deinstalliert und openhab gestoppt. Dann das Addon mit "mvn clean package" neu gebaut und die .jar auf den openhab server (Ubuntu) überführt in den Ordner /usr/share/openhab/addons. Openhab nun wieder gestartet. Und es funktioniert.

Viel Spaß =)

Re: Fenster-Status einer Gruppe wird falsch angezeigt

Verfasst: 7. Okt 2021 18:39
von udo1toni
Ich denke, das Problem ist so noch nicht aufgetaucht, weil bisher alle Anwender die Gruppen in openHAB gebildet haben.

Aber natürlich ist Dein Wunsch legitim, auch die nativen Gruppen verwenden zu können, und super, dass Du auch noch direkt den Code korrigieren konntest!


Gesendet von iPad mit Tapatalk