Fenster-Status einer Gruppe wird falsch angezeigt

Moderator: seppy

Antworten
terler
Beiträge: 2
Registriert: 7. Okt 2021 10:58
Answers: 1

Fenster-Status einer Gruppe wird falsch angezeigt

Beitrag 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
von terler » 7. Okt 2021 18:15
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ß =)
Gehe zur vollständigen Antwort

terler
Beiträge: 2
Registriert: 7. Okt 2021 10:58
Answers: 1

Re: Fenster-Status einer Gruppe wird falsch angezeigt

Beitrag 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ß =)

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

Re: Fenster-Status einer Gruppe wird falsch angezeigt

Beitrag 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
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten