Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues MQTT Plugin

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

  • Msinn
    antwortet
    Ich habe Dein (geplantes) Setup jetzt so verstanden:

    Du möchtest von SmartHomeNG MQTT Telegramme an IOBroker schicken, der dann (für diese Kommunikation nicht relevant) auf einem weiteren Weg die Shelly Devices anspricht.

    Jetzt die Frage: Wie ist das Topic und wie muss die Payload aussehen, die IOBroker erwartet?
    Das Musst Du exakt benennen, da es für den Inhalt der Payload im MQTT Protokoll v3 keine Definition gibt. Die Payload ist einfach ein Array of Byte. Beide Geräte können sich also nur verstehen, wenn sie sich einig sind, wie dieses Array of Byte zu interpretieren ist.


    Ich vermute, Du möchtest auch Statusänderungen an SmartHomeNG zurückmelden. Wie ist das Topic, welches IOBroker sendet und welche Payload wird von IOBroker gesendet? Das kannst Du am besten Mit Tools wie MQTT Explorer, MQTT.fx oder ähnlichen sehen.


    Nachtrag:

    Zitat von danny Beitrag anzeigen
    hier ein Screenshott wo ich gestartet habe und 2 Nachrichten mit Status bekommen von Sophia und Florian. Beide false. Dann schalte ich bei Florian jeweils 2x an und 2x aus.
    Wo hast Du was gestartet?
    Woher hast Du die Nachrichten bekommen?
    Wie schaltest Du?
    Woher kommen die Messages wo false drüber steht? Wer interpretiert, dass die raw Payload "false" bedeutet?
    Wenn Du beim Einschalten 2 Messages bekommen hast und 2x an und 2x aus geschaltet hast, müsstest Du 6 MQTT Messages haben und nicht 4.
    Zuletzt geändert von Msinn; 28.05.2020, 11:27. Grund: Nachtrag hinzugefügt

    Einen Kommentar schreiben:


  • danny
    antwortet
    Zitat von Msinn Beitrag anzeigen
    Was meinst Du damit? Ich verstehe Dein Setup im Moment nicht.

    Sieht das so aus?
    SmartHomeNG ---> MQTT ---> IOBroker ---> Alexa ---> Shelly?
    SmartHomeNG ---> MQTT ---> IOBroker ---> Shelly(Web_Api)?
    oder Alexa direkt
    Alexa --->Shelly

    Zitat von Msinn Beitrag anzeigen
    Das Bild ist übrigens nicht aus IOBroker sondern aus dem Webinterface des Shelly Devices selbst.
    Stimmt.

    Zitat von Msinn Beitrag anzeigen
    Aus welchem Tool stammt der Screenshot?
    Wer sendet und wer hat die Topics aboniert?
    Topic to subscribe habe ich einfach ein # eingefügt.
    Mit dem Tool "mqttbox" arbeite ich immer und senden sollte smarthomeNG.
    Habe das Licht einfach in der Adminoberfläche von smarthomeNG ein- und ausgeschalten.
    In Smartvisu ändert es entsprechend seinen Status aber in der mqttbox sieht man nur wie im Screenshot vorher.

    Zitat von Msinn Beitrag anzeigen
    Andere Frage: Wenn die Shelly Devices bai Dir bereits über Alexa ansteuerbar sind, wäre dann nicht der Weg das Alexa Plugin von SmartHomeNG zu nutzen?
    Ich habe das Alexa Plugin schon mal probiert aber bin qualvoll gescheitert. Bei mir läuft IOBroker,SmarthomeNG,KNXD und Pihole auf einer Synology im Docker.
    Smartvisu im Webserver und MQTT als Packet auf der Synology (DS218+).
    Bekomme nach Umstellung die AmazonDash Buttons auch aktuell nicht zum laufen. Wollte nicht noch eine neue Baustelle aufmachen mit dem Alexa Plugin.
    Finde es auch viel zu kompliziert und die Beschreibung passte nicht zusammen mit dem was mir bei Amazon angezeigt wurde. Habe auch keinen ReverseProxy
    da ich VPN benutze. Wüsste auch nicht wie ich das mit meiner Synology machen könnte.
    MQTT muss doch irgendwie wieder zum laufen gebracht werden?

    Hatte es damals über eine Änderung im Plugin gelöst. Beitrag #93 von henfri. Das war nur ein Mapping von True auf true und False auf false.
    Das sollte doch bool_values machen oder nicht?

    Hier noch Screenshots von der Synology. Brauchts du irgendein Logfile? oder andere Bilder?

    Anmerkung 2020-05-28 113352.png

    Anmerkung 2020-05-28 113233.png
    Danke für deine Hilfe.
    Zuletzt geändert von danny; 28.05.2020, 10:51.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zitat von danny Beitrag anzeigen
    Deswegen kommuniziere ich über IOBroker indirekt mit Shelly.
    Was meinst Du damit? Ich verstehe Dein Setup im Moment nicht.

    Sieht das so aus?
    SmartHomeNG ---> MQTT ---> IOBroker ---> Alexa ---> Shelly?

    Das Bild ist übrigens nicht aus IOBroker sondern aus dem Webinterface des Shelly Devices selbst.

    Zitat von danny Beitrag anzeigen
    hier ein Screenshott wo ich gestartet habe und 2 Nachrichten mit Status bekommen
    Aus welchem Tool stammt der Screenshot?
    Wer sendet und wer hat die Topics aboniert?


    Andere Frage: Wenn die Shelly Devices bai Dir bereits über Alexa ansteuerbar sind, wäre dann nicht der Weg das Alexa Plugin von SmartHomeNG zu nutzen?
    Zuletzt geändert von Msinn; 28.05.2020, 09:33.

    Einen Kommentar schreiben:


  • danny
    antwortet
    Hallo Msinn,

    ich habe aber die Shelly RGBW2 Geräte. Zur info: Ich habe das Shelly Plugin nicht in Betrieb aus 2 Gründen.
    Damals gab es das nicht und ich will die "Alexa" Funktion nicht verlieren. Die Geräte sind bei mir über IOBroker angebunden und da auch nicht über MQTT sondern über die Webschnittstelle.
    Man kann bei IOBroker im Plugin auswählen wie die Kommunikation funktionieren soll (siehe Bild unten). Wenn bei den Shelly Geräten MQTT aktiviert wird dann geht die Alexa Funktion verlohren. Diese nutzen aber meine Kinder sehr gerne und die soll auch beibehalten werden. Deswegen kommuniziere ich über IOBroker indirekt mit Shelly. Wenn ich jetzt aber garnichts bei bool_value eingebe dann sendet er aber ohne true und false.

    Shelly2MQTT.png

    Code:
        florian:
            alles_aus:
                type: bool
                visu_acl: rw
                knx_dpt: 1
                knx_send: 2/1/50
                knx_reply: 2/1/201
            licht:
                name: Florian Licht
                type: bool
                knx_send: 2/1/201
                enforce_updates: True
                knx_dpt: 1
                eval: or
                eval_trigger:
                  - .decke
                  - .wand
                  - .bett
                
                decke:
                    name: Decke
                    type: bool
                    visu_acl: rw
                    knx_dpt: 1
                    knx_send: 2/1/0
                    knx_listen: 2/1/1  
                    cache: 'yes'                
                bett:
                    name: LED Bett
                    type: bool
                    visu_acl: rw
                    knx_dpt: 1
                    knx_listen: 2/1/10
                    knx_status: 2/1/11
                    knx_reply: 2/1/11
                    mqtt_topic: Licht_Florian_Bett_Bool
    #                mqtt_mapping: "{True: 'true', False: 'false'}"
                    cache: 'yes'
                    dimmen:
                        type: num
                        visu_acl: rw
                        knx_dpt: 5.001
                        knx_listen: 2/1/13
                        knx_status: 2/1/14
                        knx_reply: 2/1/14
                        mqtt_topic: Licht_Florian_Bett_Wert
                        cache: 'yes'
    Wenn ich die Variable "bool_values" leer lasse und in Smartvisu Einschalte sendet MQTT nichts wenn ich dann Ausschalte sendet er einen leeren payload.

    hier ein Screenshott wo ich gestartet habe und 2 Nachrichten mit Status bekommen von Sophia und Florian. Beide false. Dann schalte ich bei Florian jeweils 2x an und 2x aus.



    Anmerkung 2020-05-28 092639.png

    Wie kann ich hier weiter vorgehen?

    Gruß Danny


    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Für true und false musst Du eingentlich nichts angeben. Das musst Du nur angeben, wenn Deine Devices z.B. 'On' und 'Off' oder 'Wahr' und 'Falsch'] als Strings senden/erwarten und Du die Werte in ein Item vom Typ Bool einlesen willst.

    Ich habe für bool_values nichts eingegeben und meine Shelly Devices funktionieren mit dem Shelly Plugin anstandslos.

    Einen Kommentar schreiben:


  • danny
    antwortet
    Hallo,

    kurze Frage zum parametrieren von bool_values.
    Meine Shelly Geräte erwarten false und true .
    Wie muss ich das eingeben:
    ['false','true'] oder
    'false','true'
    funktioniert so nicht.

    Gruß Danny
    mqtt.png

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    noch einmal geprüft, jetzt geht es auch mit dem Modul!!

    ich denke dass ich nur das Modul "mqtt" aktiv hatte, nicht aber auch das Plugin "mqtt"

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    Hallo Martin,

    einen Fehler habe ich bereits gefunden (aus Post #143)

    Code:
        [B]hilfs_item:[/B]
            type: dict
            mqtt_topic_in: zigbee2mqtt/0x00158d0002f2f19d
    
        wsd1_temp:
            type: str
            eval: str(sh...[B]var_dict[/B]()['temperature'])
            eval_trigger: ..[B]var_dict[/B]
    kann natürlich nicht funktionieren. dachte zuerst var_dict() wäre eine methode, aber das ist ja das item selbst.

    Somit ist noch plugin mqtt1 vs. module mqtt dict einlesen offen, das sehe ich mir bei nächster Gelegenheit an.

    Danke einstweilen!

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Ich habe inzwischen auch das Einlesen von json Payloads über das mqtt Modul und das neue Plugin nachgestellt. Ich kann auch nicht nachvollziehen, dass ein Problem gibt.

    Ich habe folgendes Item vom Typ dict definiert:
    Code:
    test:
        mqtt2:
            test_dict_subscribe:
                name: Test input from the broker with json payload
                type: dict
                mqtt_topic_in: 'test_mqtt/dict_sub'
    Dann habe ich folgendes MQTT Telegram mit Hilfe des Tools MQTT Explorer gesendet:
    Capto_Capture 2020-05-10_10-29-55_AM.jpg

    Anschließend sieht das Item in SmartHomeNG folgendermaßen aus:
    Capto_Capture 2020-05-10_10-32-12_AM.jpg

    Aus meiner Sicht funktioniert alles wie es soll.

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Nein, eigentlich nicht. Das wird nur durch das "escapen" der Anführungsstriche etwas seltsam dargestellt. Das ist aber nur ein Anzeige Thema.

    Ich hatte gestern getestet, dass die Beschreibung von mir funktioniert. Ich habe dazu folgende Items eingerichtet (mit Variationen in der Zuweisung und zum Test den Wert von voltage als string im dict:
    Code:
    test:
        dict2:
            var_dict:
                type: dict
                value: "{'battery': 80, 'voltage': '2965', 'temperature': 25.39}"
                on_change:
                    - test.dict2.var_bat = str(sh.test.dict2.var_dict()['battery'])
                    - ..var_volt = str(sh..()['voltage'])
                    - ..var_temp = str(value['temperature'])
    
            var_bat:
                type: num
    
            var_volt:
                type: str
    
            var_temp:
                type: str
    
            var_bat2:
                eval: str(sh...var_dict()['battery'])
                eval_trigger: ..var_dict
                type: str
    
            var_volt2:
                eval: sh.test.dict2.var_dict()['voltage']
                eval_trigger: test.dict2.var_dict
                type: str
    
            var_temp2:
                eval: sh.test.dict2.var_dict()['temperature']
                eval_trigger: test.dict2.var_dict
                type: num
    Über value im Item var_dict wird ein initialer Wert gesetzt. Nach dem starten von SmartHomeNG passiert folgendes:
    • Bei den Items, die über on_change befüllt werden, passiert erstmal nichts, da die Initialisierung kein Change im Sinne von on_change ist.
    • Die Items, die über eval/eval_trigger gefüllt werden, werden sofort aktualisiert (Beachte bitte, dass die numerischen Werte explizit in einen String gewandelt werden. Dann funktioniert das auch über value.

    Wenn Du jetzt in der Admin GUI den Wert von var_dict änderst (z.B. den Wert von battery auf 81 änderst), werden sofort var_bat, var_volt und var_temp aktualisiert.

    (Bitte beim Ändern des Wertes darauf achten, anschließend außerhalb des Eingabefeldes zu klicken, damit die Eingabe abgeschlossen wird, RETURN drücken tut das nicht).

    Vollziehe das bitte bei Dir nach. Ich kann beim befüllen der Subitems keinerlei Problem feststellen/nachvollziehen.

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    Hi,

    habe jetzt alle 4 Varianten durchprobiert, bei keiner funktioniert die Aktualisierung der subitems.

    Kann es mit dem Zeichensatz zusammenhängen (Auszug aus Itembaum):
    on_change test1.wsd1_temp = sh.test.hilfs_item()['temperature'] | test1.wsd1_feucht = sh.test.hilfs_item()['humidity'] | test1.wsd1_druck = sh.test.hilfs_item()['pressure'] | test1.wsd1_batterie = sh.test.hilfs_item()['battery'] | test1.wsd1_batteriespannung = sh.test.hilfs_item()['voltage'] | test1.wsd1_linkquality = sh.test.hilfs_item()['linkquality']

    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Zu den Subitems: Aus einem Grund den ich im Moment noch nicht kenne, wird der Pseudowert "value" nicht so verarbeitet, dass man ihn als dict ansprechen kann.

    Wenn Du das Item als normales Item ansprichst, also als sh.test.hilfs_item(), funktioniert das, also:

    Code:
    test:
        hilfs_item:
            type: dict
            mqtt_topic_in: zigbee2mqtt/0x00158d0002f2f19d
            on_change:
              - ..wsd1_temp = sh.test.hilfs_item()['temperature']
              - ..wsd1_feucht = sh.test.hilfs_item()['humidity']
              - ..wsd1_druck = sh.test.hilfs_item()['pressure']
              - ..wsd1_batterie = sh.test.hilfs_item()['battery']
              - ..wsd1_batteriespannung = sh.test.hilfs_item()['voltage']
              - ..wsd1_linkquality = sh.test.hilfs_item()['linkquality']
    oder flexibler mit relativer Adressierung:
    Code:
    test:
        hilfs_item:
            type: dict
            mqtt_topic_in: zigbee2mqtt/0x00158d0002f2f19d
            on_change:
              - ..wsd1_temp = sh..()['temperature']
              - ..wsd1_feucht = sh..()['humidity']
              - ..wsd1_druck = sh..()['pressure']
              - ..wsd1_batterie = sh..()['battery']
              - ..wsd1_batteriespannung = sh..()['voltage']
              - ..wsd1_linkquality = sh..()['linkquality']

    Oder Du nutzt den im Blog beschriebenen alternativen Weg:
    Code:
    # zigbee.yaml
    test:
        hilfs_item:
            type: dict
            mqtt_topic_in: zigbee2mqtt/0x00158d0002f2f19d
    
        wsd1_temp:
            type: str
            eval: str(sh...var_dict()['temperature'])
            eval_trigger: ..var_dict
    
        wsd1_feucht:
            type: str
            eval: str(sh...var_dict()['humidity'])
            eval_trigger: ..var_dict
    
        wsd1_druck:
            type: str
            eval: str(sh...var_dict()['pressure'])
            eval_trigger: ..var_dict
    
        wsd1_batterie:
            type: str
            eval: str(sh...var_dict()['battery'])
            eval_trigger: ..var_dict
    
        wsd1_batteriespannung:
            type: str
            eval: str(sh...var_dict()['voltage'])
            eval_trigger: ..var_dict
    
        wsd1_linkquality:
            type: str
            eval: str(sh...var_dict()['linkquality'])
            eval_trigger: ..var_dict
    Warum das Befüllen eines Items vom Typ dict in der neuen Version (module mqtt) nicht funktioniert muss ich mir in Ruhe anschauen.
    Zuletzt geändert von Msinn; 08.05.2020, 12:52.

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    Mit mqtt1 funktioniert die Befüllung des dict items korrekt:
    2020-05-08 12_00_34-Shngadmin.png

    Was nicht funktioniert sind die subitems, dabei bin ich nach deiner Anleitung vom Blog vorgegangen:

    2020-05-08 12_01_08-Shngadmin.png

    Code:
    # zigbee.yaml
    test:[INDENT]hilfs_item:[/INDENT][INDENT=2]type: dict[/INDENT][INDENT=2]mqtt_topic_in: zigbee2mqtt/0x00158d0002f2f19d[/INDENT][INDENT=2]on_change:[/INDENT][INDENT=2]  - ..wsd1_temp = value['temperature'][/INDENT][INDENT=2]  - ..wsd1_feucht = value['humidity'][/INDENT][INDENT=2]  - ..wsd1_druck = value['pressure'][/INDENT][INDENT=2]  - ..wsd1_batterie = value['battery'][/INDENT][INDENT=2]  - ..wsd1_batteriespannung = value['voltage'][/INDENT][INDENT=2]  - ..wsd1_linkquality = value['linkquality'][/INDENT][INDENT=2]enforce_updates: 'true'[/INDENT][INDENT]wsd1_temp:[/INDENT][INDENT=2]type: str[/INDENT][INDENT=2]enforce_updates: 'true'[/INDENT][INDENT]wsd1_feucht:[/INDENT][INDENT=2]type: str[/INDENT][INDENT]wsd1_druck:[/INDENT][INDENT=2]type: str[/INDENT][INDENT]wsd1_batterie:[/INDENT][INDENT=2]type: str[/INDENT][INDENT]wsd1_batteriespannung:[/INDENT][INDENT=2]type: str[/INDENT][INDENT]wsd1_linkquality:[/INDENT][INDENT=2]type: str [/INDENT]















    Einen Kommentar schreiben:


  • Msinn
    antwortet
    Kannst Du mal testen ob es funktioniert (mit item als type dict) wenn Du Deine SmartHomeNG Installation umkonfigurierst: Das mqtt Plugin auskommentieren und das mqtt1 Plugin (das alte) vollständig konfigurieren (mit broker, etc.)?

    Das was da als String kommt sieht erstmal ok aus. Die values ohne Quotes sind halt numerisce values. Hätten sie Quotes wären es Strings. Das sollte nicht das Problem sein.

    Einen Kommentar schreiben:


  • jonsson
    antwortet
    dict->str von {} auf {"battery":86,"voltage":2975,"temperature":28.77," humidity":30.36,"pressure":970.4,"linkquality":131 }
    subitems funktionieren so natürlich nicht mehr.
    sind die fehlenden Anführungszeichen der values das Problem?

    Einen Kommentar schreiben:

Lädt...
X