Ankündigung

Einklappen
Keine Ankündigung bisher.

McLighting in Openhab einbinden

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

    McLighting in Openhab einbinden

    Hallo Leute,

    ich habe da ein Problem mit der LED-Steuerung "McLighting"

    Ich habe die Software auf einen ESP8266 geflasht. Alles gut.
    Hier die Anleitung dazu : "https://github.com/toblum/McLighting"

    Web Site zur Steuerung des LED-Streifens wird erreicht, alles gut.

    LEDs reagieren, alles gut.

    Nun zu meinem Problem.
    Ich bekomme "McLighting" nicht in Openhab integriert.
    Ich habe im Arduino-Code "homeassistant" aktiviert.

    Dann soll man doch mit dem MQTT 2 Binding dann die homeassistant-Komponenten automatisch erkennen können.
    Das klappt bei mir nicht.

    1. MQTT2 Binding installiert
    2. Manuell Broker zugefügt
    3. in "Inbox" Broker bestätigt, geht in "Things" auch online.
    4. Dann sollen lt. Google die Komponenten automatisch erkannt werden.
    Und genau das passiert nicht.

    Kann ich die Komponenten manuell hinzufügen?

    Hat das schon mal wer ans laufen bekommen?


    Brauche da mal einen Tip....


    Gruß
    Yankee








    #2
    Weil Du oben kleinteilig aufgezählt, das aber nicht erwähnt hast:

    Hast Du denn einen Broker installiert (z.B. mosquitto oder moquette)? Hast Du im McLighting die Zugangsdaten zum Broker hinterlegt? Ich kenne McLighting nicht... kannst Du sehen, dass McLighting mit de mBroker verbunden ist? Kannst Du über ein Tool wie mqtt.fx oder mqtt spy auf den Broker und McLighting zugreifen?

    Kommentar


      #3
      Ich habe als Broker "mosquitto" am laufen.
      McLighting verbindet sich mit dem Broker, ich kann die Nachrichten mitlesen.
      McLighting sendet auch Informationen über MQTT.

      Am Web UI stelle ich z. B. die Animation "Breathe" ein (Ist die Animation Nr. 2)

      Dann kommen folgende Meldungen in der seriellen Konsole und über MQTT:

      Serielle Konsole bei Arduino IDE:
      Code:
      11:09:18.968 -> WS: Activated mode [2]!
      11:09:21.975 -> Saving cfg: {"mode":2,"strip_mode":17,"brightness":196,"speed":196,"red":255,"green":0,"blue":0} Success!
      11:09:23.985 -> MQTT: Send [home/McLighting01_ha/state/out]: {"state":"OFF","color" {"r":255,"g":0,"b":0},"brightness":196,"color_temp":327,"speed":196,"effect":"Theater Chase Rainbow"}
      Bei meinem MQTT Sniffer kommt folgendes:

      Code:
      McLighting01/out  OK  /2
      home/McLighting01_ha/state/out  {"state":"ON","color":{"r":255,"g":0,"b":0},"brightness":36,"color_temp":327,"speed":196,"effect":"Breath"}




      Kommentar


        #4
        Ich habe da mal selber was versucht:

        Als Basis habe ich diese Links verwendet:

        https://community.openhab.org/t/crea...-project/42368
        und
        https://github.com/toblum/McLighting/wiki/WebSocket-API

        Folgende Configs habe ich:
        LEDStreifen.items:

        Code:
        Switch Giebel_Garage "Giebel Garage" (gLedstrip) {mqtt=">[broker:McLighting01/in:command:ON:/0],>[broker:McLighting01/in:command:OFF:=off],<[broker:McLighting01/out:state:ON:OK /0],<[broker:McLighting01/out:state:OFF:OK =off]"}
        Number Giebel_Helligkeit "Giebel Helligkeit [%d]" (gLedstrip) {mqtt=">[broker:McLighting01/in:command:*:JS(DimScale100-255.js)], <[broker:McLighting01/out:state:JS(DimScale255-100.js)]"}
        //Dimmer Giebel_Speed "Giebel Geschwindigkeit [%.0f]" (gLedstrip) {mqtt=">[broker:McLighting01/in:command:*:JS(Speedscale100-255.js)], <[broker:McLighting01/out:state:JS(Speedscale255-100.js)]", autoupdate="true"}
        //String Giebel_Farbe
        String Giebel_HEX //{mqtt=">[broker:McLighting01/in:command:*:default]"}
        String Giebel_HEX2 {mqtt=">[broker:McLighting01/in:command:*:default]"}
        Color Giebel_Farbe "Giebel Farbe" (gLedstrip) {mqtt=">[broker:McLighting01/in:command:*:JS(Colour.js)]"}
        Number Giebel_Effekte "Giebel Effekte [%d]" (gLedstrip) {mqtt=">[broker:McLighting01/in:command:*:MAP(coloreffectJSON.map)]"}
        Number Giebel_Farbname "Giebel Farbname [%d]" (gLedstrip) {mqtt=">[broker:McLighting01/in:command:*:MAP(coloreffectJSON.map)]"}
        Test.sitemap:

        Code:
        Colorpicker item=Giebel_Farbe label="Giebel Farbe" icon="colorwheel"
                
                 Selection item=Giebel_Effekte mappings=[201='TV' ,3='Static',4='Blink',5='Breath',6='ColorWipe',7='ColorWipeInverse',8='ColorWipeReverse',9='ColorWipeReverseInverse',10='ColorWipeRandom',11='RandomColor',12='SingleDynamic',13='MultiDynamic',14='Rainbow',15='RainbowCycle',16='Scan',17='DualScan',18='Fade',19='TheaterChase',20='TheaterChaseRainbow',21='RunningLights',22='Twinkle',23='TwinkleRandom',24='TwinkleFade',25='TwinkleFadeRandom',26='Sparkle',27='FlashSparkle',28='HyperSparkle',29='Strobe',30='StrobeRainbow',31='MultiStrobe',32='BlinkRainbow',33='ChaseWhite',34='ChaseColor',35='ChaseRandom',36='ChaseRainbow',37='ChaseFlash',38='ChaseFlashRandom',39='ChaseRainbowWhite',40='ChaseBlackout',41='ChaseBlackoutRainbow',42='ColorSweepRandom',43='RunningColor',44='RunningRedBlue',45='RunningRandom',46='LarsonScanner',47='Comet',48='Fireworks',49='FireworksRandom',50='MerryChristmas',51='FireFlicker',52='FireFlicker(soft)',53='FireFlicker(intense)',54='CircusCombustus',55='Halloween',56='BicolorChase',57='TricolorChase',58='ICU' ]
                 Selection item=Giebel_Farbname mappings=[ 60='WHITE',61='SILVER',62='GRAY',63='BLACK',64='RED',65='MAROON',66='YELLOW',67='OLIVE',68='LIME',69='GREEN',70='AQUA',71='TEAL',72='BLUE',73='NAVY',74='FUCHSIA',75='PURPLE' ]
        Setpoint item=Giebel_Helligkeit minValue=1 maxValue=100 step=1
        Switch item=Giebel_Garage mappings=[ 'OFF'='off','ON'='Cont..' ]
        //Slider item=Giebel_Speed
        LED-Streifen.rules:

        Code:
        rule "Farbe Giebel anpassen"
        when
        Item Giebel_Farbe received command
        then
        val red = (((Giebel_Farbe.state as HSBType).red * 2.55) as Number).intValue
        val green = (((Giebel_Farbe.state as HSBType).green * 2.55) as Number).intValue
        val blue = (((Giebel_Farbe.state as HSBType).blue * 2.55) as Number).intValue
        //val red2 = red.toHexString
        logInfo("RGB Status", "R " + red + ", " + "G " + green + ", " + "B " + blue)
        sendCommand(Giebel_HEX, "*" + Integer::toHexString(red) + Integer::toHexString(green) + Integer::toHexString(blue))
        var giebel_string = Giebel_HEX.state.toString
        sendCommand(Giebel_HEX2, giebel_string)
        end




        Transformations:

        coloreffectjson.map

        Code:
        1==off
        2==all
        OFF==off
        ON=/0
        3=/0
        4=/1
        5=/2
        6=/3
        7=/4
        8=/5
        9=/6
        10=/7
        11=/8
        12=/9
        13=/10
        14=/11
        15=/12
        16=/13
        17=/14
        18=/15
        19=/16
        20=/17
        21=/18
        22=/19
        23=/20
        24=/21
        25=/22
        26=/23
        27=/24
        28=/25
        29=/26
        30=/27
        31=/28
        32=/29
        33=/30
        34=/31
        35=/32
        36=/33
        37=/34
        38=/35
        39=/36
        40=/37
        41=/38
        42=/39
        43=/40
        44=/41
        45=/42
        46=/43
        47=/44
        48=/45
        49=/46
        50=/47
        51=/48
        52=/49
        53=/50
        54=/51
        55=/52
        56=/53
        57=/54
        58=/55
        159=/56
        160=/57
        161=/58
        162=/59
        163=/60
        201==tv
        60=#FFFFFF
        61=#C0C0C0
        62=#808080
        63=#000000
        64=#FF0000
        65=#800000
        66=#FFFF00
        67=#808000
        68=#00FF00
        69=#008000
        70=#00FFFF
        71=#008080
        72=#0000FF
        73=#000080
        74=#FF00FF
        75=#800080
        colour.js

        Code:
        (function (i) {
        var res = i.split(",");
        var out = HSVtoRGB((res[0]), (res[1]), (res[2]));
        out2 = rgbToHex((out.r), (out.g), (out.b))
        return out2;
        })(input)
        function componentToHex(r) {
        var hex = c.toString(16);
        return hex.length == 1 ? "0" + hex : hex;
        }
        function rgbToHex(r, g, b) {
        return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
        }
        //https://stackoverflow.com/questions/17242144/javascript-convert-hsb-hsv-color-to-rgb-accurately
        function HSVtoRGB(h, s, v) {
        var r, g, b, i, f, p, q, t;
        if (arguments.length === 1) {
        s = h.s, v = h.v, h = h.h;
        }
        h = h / 360;
        s = s / 100;
        v = v / 100;
        i = Math.floor(h * 6);
        f = h * 6 - i;
        p = v * (1 - s);
        q = v * (1 - f * s);
        t = v * (1 - (1 - f) * s);
        switch (i % 6) {
        case 0: r = v, g = t, b = p; break;
        case 1: r = q, g = v, b = p; break;
        case 2: r = p, g = v, b = t; break;
        case 3: r = p, g = q, b = v; break;
        case 4: r = t, g = p, b = v; break;
        case 5: r = v, g = p, b = q; break;
        }
        return {
        r: Math.round(r * 255),
        g: Math.round(g * 255),
        b: Math.round(b * 255)
        };
        };
        DimScale (Umrechnung von 100-255 und umgekehrt)
        Für die Helligkeit entsprechende Scripts


        Code:
        
        (function(i) {
        var value = parseInt(i);
        return "%"+Math.floor((value * 255) / 100);
        })(input)

        Code:
        (function(i) {
        var value = i.slice(4);
        return "%"+Math.floor((value * 100) / 255);
        })(input)





        Die payloads laufen auch aus openhab raus auf den Broker und kommen beim ESP8266 an. Der macht dann, was er soll.
        Zumindest läuft bis jetzt folgendes:

        - An/Aus
        - Farbwahl über feste Auswahl (Nicht Colorpicker)
        - Animationen
        - Helligkeit

        Was nicht geht:
        Colorpicker

        Ich habe über die rule schon die HSB-Daten des Colorpicker in HEX umgewandelt.
        Diesen Wert (#121212) bekomme ich aber nicht über MQTT verschickt.
        Wenn ich den händisch über "mosquitto_pub .... " versende, geht das tadellos.
        Geht das etwa nicht aus Openhab heraus?



        Und ich bekomme immer folgende Fehlermeldung, auch wenn nur Kleinigkeiten (z. B. "/2" zum Umschalten der Animation) über MQTT versendet werden:


        Code:
          
         [FONT=Arial]2019-11-30 23:17:36.081 [vent.ItemStateChangedEvent] - Giebel_Garage changed from OFF to ON[/FONT]  
        ==> /var/log/openhab2/openhab.log <==
        
        2019-11-30 23:17:36.158 [WARN ] [.mqtt.internal.MqttMessageSubscriber] - Error processing MQTT message.
        
        org.openhab.core.transform.TransformationException: An error occurred while loading script.
        
        at org.openhab.core.transform.TransformationHelper$TransformationServiceDelegate.transform(TransformationHelper.java:67) ~[196:org.openhab.core.compat1x:2.4.0]
        
        at org.openhab.binding.mqtt.internal.MqttMessageSubscriber.processMessage(MqttMessageSubscriber.java:133) [255:org.openhab.binding.mqtt:1.13.0]
        
        at org.openhab.io.transport.mqtt.internal.MqttBrokerConnection.messageArrived(MqttBrokerConnection.java:570) [256:org.openhab.io.transport.mqtt:1.13.0]
        
        at org.eclipse.paho.client.mqttv3.internal.CommsCallback.deliverMessage(CommsCallback.java:475) [256:org.openhab.io.transport.mqtt:1.13.0]
        
        at org.eclipse.paho.client.mqttv3.internal.CommsCallback.handleMessage(CommsCallback.java:379) [256:org.openhab.io.transport.mqtt:1.13.0]
        
        at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:183) [256:org.openhab.io.transport.mqtt:1.13.0]
        
        at java.lang.Thread.run(Thread.java:748) [?:?]

        Stimmt da was nicht mit dem Binding?
        Ich habe Openhab auch schon mal neu gestartet.
        Oder macht das Sinn, da auf MQTT 2.x umzusteigen?

        Kommentar

        Lädt...
        X