Ankündigung

Einklappen
Keine Ankündigung bisher.

Zigbee Sensoren via zigbee2mqtt Plugin an SmartHomeNG

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sisamiwe
    antwortet
    Zitat von devau Beitrag anzeigen
    enforce_update:yes?
    Ja, in der Itemdefinition. So:

    Code:
    ZB:
        Switch:
            X54EB:
                click:
                    type: str
                    tasmota_topic: tasmota_A8D079
                    tasmota_zb_device: 0x54EB
                    tasmota_zb_attr: click
                    enforce_updates: yes
                action:
                    type: str
                     tasmota_topic: tasmota_A8D079
                     tasmota_zb_device: 0x54EB
                     tasmota_zb_attr: action
                     enforce_updates: yes

    Einen Kommentar schreiben:


  • devau
    antwortet
    Einschalten geht, ja, Ausschalten nein. Es benötigt also ein enforce_update:yes?

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von devau Beitrag anzeigen
    Da fehlt noch irgendeine Verbindung zu Logic...?
    Ja. Im Berarbeitungsfenster der Logik gibt es oben einen Reiter "Parameter". Dort musst Du unter "Watch Item(s)" das Item eintragen, auf das die Logik "hört".
    Dann klappt es auch.

    Einen Kommentar schreiben:


  • devau
    antwortet
    Habe nun die Logik erstellt und aktiviert. Manuell auslösen funktioniert. Aber wenn ich das mit dem ZigBEE-Switch mache geht nichts. Gemäss Item-Tree kommen die Befehle dort jedoch sauber rein. Da fehlt noch irgendeine Verbindung zu Logic...?

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von devau Beitrag anzeigen
    Ich habe übrigens für diesen Sensor in Deiner plugin.yaml unter "valid_list_ci:" noch diese zwei Werte eingetragen: - AqaraVibrationMode und - AqaraVibrationsOrAngle
    Das brauchst Du nicht.
    Relevant für die ZigbeeSensoren ist das ItemAttribut "tasmota_zb_attr:" Das ist bislang nicht "konditioniert". Ich habe so gemacht, damit man das Plugin nicht bei jedem neuen Sensor etc ändern muss. Funktionieren tun natürlich nur die Werte, die auch im Dict. Dieses wird im WebIF auch unter "tasmota Zigbee" angezeigt. Wenn man andere Attributwerte nutzt, fängt das Plugin den Fehler ab und meldet das, je nach LogLevel.

    Das Item Attibut "tasmota_attr:" wird nur für "native" TasmotaDevices genutzt.

    Einen Kommentar schreiben:


  • devau
    antwortet
    Werde ich alles noch gerne ausprobieren. Der Aqara Vibrationssensor ist schon sehr speziell: Keine Reaktion mehr, der legt sich anscheinend schlafen über Nacht. Keine Erschütterung bringt ihn jetzt mehr zum Erwachen. Das ist der zweite Vib-Sensor, habe den ersten bereits zurückgeschickt weil der genau gleich nicht funktionierte.
    In der Tasmota-Konsole werden auf jedenfall keinerlei Einträge mehr von dem generiert..
    Ich habe übrigens für diesen Sensor in Deiner plugin.yaml unter "valid_list_ci:" noch diese zwei Werte eingetragen: - AqaraVibrationMode und - AqaraVibrationsOrAngle

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    devau

    In meinem Repo liegt eine neue Version des Plugins. Diese unterstütz nun auch die Gerätekurznamen mit "0x" beginnend. Getestet habe ich auch mit dem Türsensor und dem Vibrationssensor.

    Probiers gern mal aus.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    devau
    Zitat von Sisamiwe Beitrag anzeigen
    Ich stelle heute Abend mal ein Beispiel ein.
    Bzgl der Logik, hier mal mein Bespiel:

    logik.py
    Code:
    #!/usr/bin/env python3
    # tasmota_rfbridge_action.py
    
    ## Logik, um basierend auf dem Code eines RF-Tasters Aktionen auszuführen
    
    
    logger.info(f"Logik '{logic.id()}' ausgelöst durch: {trigger['by']} und {trigger['source']} mit Wert {trigger['value']}")
    
    #Wenn Trigger ein Item war, dann RF-Data einlesen
    if trigger['by'].lower() == 'item':
        rf_data = trigger['value']
    
        ##RF-Data auswerten
        # Licht Dachboden an bei Empfgang von 3602B2 (links)
        if rf_data == '3602B2':
            sh.licht.dachboden.decke.onoff(1)
        # Licht Dachboden toggeln bei Empfgang von 3602B4 (Mitte)
        if rf_data == '3602B4':
            sh.licht.dachboden.decke.onoff(not sh.licht.dachboden.decke.onoff())
        # Licht Dachboden aus bei Empfgang von 3602B8 (rechts)
        if rf_data == '3602B8':
            sh.licht.dachboden.decke.onoff(0)
        # Licht Garage aus bei Empfang von CC2871
        if rf_data == 'CC2871':
            sh.licht.garage.decke.onoff(0)
        # Steckdose Waschmaschine aus bei Empfang von 021FE2
        if rf_data == '021FE2':
            sh.steckdosen.waschkueche.waschmaschine.onoff(not sh.steckdosen.waschkueche.waschmaschine.onoff())
            logger.info(f"Steckdose Waschmaschine geschaltet. Neuer Zustand ist {sh.steckdosen.waschkueche.waschmaschine.onoff()}")
        # Steckdose Wäschetrockner aus bei Empfang von 021FE4
        if rf_data == '021FE4':
            sh.steckdosen.waschkueche.waeschetrockner.onoff(not sh.steckdosen.waschkueche.waeschetrockner.onoff())
            logger.info(f"Steckdose Wäschetrockner geschaltet. Neuer Zustand ist {sh.steckdosen.waschkueche.waeschetrockner.onoff()}")
    Das ist eine ähnliche Anwendung. Es gibt ein Item, in den die Info eines Tasters via Bridge landet. Das ist das Triggeritem für die Logik.
    Bei dir sollte das dann so aussehen:
    logik.py
    Code:
    # Einlesen der Triggerwerte
    click = sh.ZB.Switch.X54EB.click()
    action = sh.ZB.Switch.X54EB.action()
    
    ##ZigbeeDaten auswerten
    # Wenn Einfach-Click, dann Licht Umschalten
    if click == 'single':
        sh.OG.Buero.Licht.Decke.schalten(not sh.OG.Buero.Licht.Decke.schalten())
    Die Items müssten dann so aussehen:
    Code:
    # ZB.Switch.X54EB.yaml
    ZB:
        Switch:
            X54EB:
                click:
                    type: str
                    tasmota_topic: tasmota_A8D079
                    tasmota_zb_device: 0x54EB
                    tasmota_zb_attr: click
                action:
                    type: str
                     tasmota_topic: tasmota_A8D079
                     tasmota_zb_device: 0x54EB
                     tasmota_zb_attr: action
    Kannst Du gern mal probieren.

    Einen Kommentar schreiben:


  • devau
    antwortet
    Den Vibrations-Sensor DJT11LM habe ich nun auch erhalten. Dessen Empfindlichkeit kann ich jedoch nicht per Command einstellen:

    16:18:57.308 CMD: ZbSend {"Device":"0x99E7", "Endpoint":1, "Send":{"sensitivity": "medium"}}
    16:18:57.315 MQT: stat/tasmota_A8D079/RESULT = Unrecognized zigbee command: sensitivity


    Update: Ist in einigen Foren nachzulesen, dass das so nicht geht, sondern so:
    ZbSend {"Device":"0x99E7", "Endpoint":1, "Manuf":"0x115F", "Write":{"0000/FF0D%20":<Sens>}}
    <Sens> ist:
    1= High, 11 = Medium, 21 = Low
    Zuletzt geändert von devau; 16.11.2021, 16:52.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von devau Beitrag anzeigen
    Hat auch nicht viel gebracht, da das Relais dann innert Sekundenbruchteilen an und wieder abgefallen ist. Ich habe es nun anders gelöst mit einem Delay-Item, so dass zwischen Ein- und Ausschalten mindestens 10 Sekunden vergehen müssen!
    Ich mache das mit einer Logik, die von den eingehenden Werten getriggert wird. In dieser Logik habe ich dann alle entsprechenden Aktionen. Vorteile sehe ich in der Lesbarkeit des Codes und das man die Logik zu Laufzeit neu laden kann. Ich stelle heute Abend mal ein Beispiel ein.

    Im Grund geht das so:
    Die Logik wird getriggert, wenn auf den Items des Zigbee Switches Werte ankommen.
    Die Logik wertet den Wert aus (hier 'single') und löst direkt das Umschalten auf dem Zielitem aus. Das geht dann einfach mit:
    Code:
    sh.OG.Buero.Licht.Decke.schalten(not sh.OG.Buero.Licht.Decke.schalten())
    Das Item (type bool) bekommt dann immer den gegenteiligen Wert, verglichen mit dem aktuellen.


    Zitat von devau Beitrag anzeigen
    Ich habe gestern Abend noch den Aqara Fenster-Sensor erhalten
    Den habe ich auch. Somit kann ich die notwendige Pluginerweiterung selbst testen.

    Einen Kommentar schreiben:


  • devau
    antwortet
    Hat auch nicht viel gebracht, da das Relais dann innert Sekundenbruchteilen an und wieder abgefallen ist. Ich habe es nun anders gelöst mit einem Delay-Item, so dass zwischen Ein- und Ausschalten mindestens 10 Sekunden vergehen müssen!
    Wie nun weiter? Ich habe gestern Abend noch den Aqara Fenster-Sensor erhalten ( https://www.zigbee2mqtt.io/devices/MCCGQ11LM.html ) der hat andere Werte, die da übermittelt werden. Ich bin nun am Einbauen dieses Sensors.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Zitat von devau Beitrag anzeigen
    Das gibt zwar die folgende Warnung, aber es funktioniert trotzdem:
    Was soll der autotimer bewirken?

    Wenn du immer wieder das on_change ausführen willst, auch wenn der Wert sich nicht ändert, aber erneut im Item ankommt, nutze das Item attribut "enforce_updates: yes"

    Einen Kommentar schreiben:


  • devau
    antwortet
    Mittlerweile kann ich auch ein knx-Licht ein/ausschalten mit etwas Hilfslogik, da ja nur ein "single" übermittelt wird bei einem Tastendruck. Via Autotimer setze ich dann den Wert bei "click" wieder zurück. Das gibt zwar die folgende Warnung, aber es funktioniert trotzdem:

    WARNING plugins.priv_tasmota update_item: ZB.Switch.X54EB.click, trying to change item in SmartHomeNG that is read only in tasmota device (by Autotimer)

    Code:
    # ZB.Switch.X54EB.yaml
    ZB:
        Switch:
            X54EB:
                click:
                    type: str
                    tasmota_topic: tasmota_A8D079
                    tasmota_zb_device: SWITCH1
                    tasmota_zb_attr: click
                    autotimer: 10 = ''
                    on_change:
                    - ZB.Switch.X54EB.trigger_H = 1 if sh..self() == 'single' and sh.OG.Buero.Licht.Decke.schalten() == 0 else None
                    - ZB.Switch.X54EB.trigger_L = 1 if sh..self() == 'single' and sh.OG.Buero.Licht.Decke.schalten() == 1 else None
                action:
                    type: str
                    tasmota_topic: tasmota_A8D079
                    tasmota_zb_device: SWITCH1
                    tasmota_zb_attr: action
                trigger_H:
                    type: bool
                    initial_value: 0
                    autotimer: 10 = 0
                    on_change: OG.Buero.Licht.Decke.schalten = 1 if sh..self() == 1 else None
                trigger_L:
                    type: bool
                    initial_value: 0
                    on_change: OG.Buero.Licht.Decke.schalten = 0 if sh..self() == 1 else None

    Einen Kommentar schreiben:


  • devau
    antwortet
    Das mit den Logs ist nun klar: Ich sollte mir hat schon die letzte Seite oben auf der Logübersicht anzeigen lassen..... :-)
    Was ich aber habe, sind massenweise Einträge alle 20 Sekunden (!) im smarthome-warnings.log wie diese da:

    2021-11-15 13:32:49 WARNING lib.network Connection closed by peer 127.0.0.1

    Update: Der Grund war, dass der Tunnel des Siemens IP-KNX-Routers nur 1 Device zur Kommunikation zulässt. Nach Abschalten des produktiven Raspis's sind diese Einträge nun verschwunden!

    Dafür läuft es jetzt aber korrekt ab in Sachen ZigBEE!!
    Ich erhalte im Item Baum bei den Werten jeweils die EInträge, welche ZigBEE übermittelt: Also beim click: single, double,hold,release. Bei action nur dann etwas, wenn ich länger drücke, also hold und release!
    Zuletzt geändert von devau; 15.11.2021, 18:02.

    Einen Kommentar schreiben:


  • android
    antwortet
    Hatte Shelly vorgeschlagen, aber war für deine Anwendung doch Quatsch

    Einen Kommentar schreiben:

Lädt...
X