Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Statusdisplay - McLighting vs. Tasmota Son. Basic

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Statusdisplay - McLighting vs. Tasmota Son. Basic

    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      Gwenselah last edited by

      ich bin hier final bei Tasmota gelandet, steuere das meiste per HTTP-Request an, MQTT nur um im Script auf Ereignisse wie PowerOn zu reagieren.

      1 Reply Last reply Reply Quote 0
      • S
        stefande @Elektroman last edited by

        @Elektroman

        Der McLighting Fork von FabLab Luenen wird noch weiter entwickelt:

        Link Text

        1 Reply Last reply Reply Quote 0
        • joergeli
          joergeli @Gwenselah last edited by

          @Gwenselah
          Das kennst Du?:
          LED Status Display
          Es läuft in ioBroker über den mqtt-Adapter (Achtung: evtl. anderen mqtt-Port wählen, falls der schon durch z.B. Sonoff-mqtt belegt ist).

          Beim Einschalten werden alle Kanäle (LED01 - LED31) subscribed und somit auch alle aktuellen States angezeigt, also nicht nur bei Änderung eines States.
          Ist allerdings "ganz normal" über die Arduino-IDE geflashed und die Nezwerkparameter (IP-Adresse, WLAN-SSID, etc.) müssen manuell im Sketch eingtragen werden ( ich bin ein Freund statischer IP-Adressen bei fest installierten Geräten).

          Ich habe 2 Stck. dieser LED Status-Displays gebaut und sie laufen absolut problemlos, keine Hänger, o.ä.

          G OpenSourceNomad 2 Replies Last reply Reply Quote 0
          • G
            Gwenselah @joergeli last edited by

            @joergeli Vielen Dank für den Tipp. Nein, das kenne ich nicht, sieht aber schon Mal gut aus. Werd ich mir mal genauer anschauen.

            1 Reply Last reply Reply Quote 0
            • OpenSourceNomad
              OpenSourceNomad Most Active @joergeli last edited by OpenSourceNomad

              @joergeli said in Statusdisplay - McLighting vs. Tasmota Son. Basic:

              Ist allerdings "ganz normal" über die Arduino-IDE geflashed und die Nezwerkparameter (IP-Adresse, WLAN-SSID, etc.) müssen manuell im Sketch eingtragen werden

              Ich habe es glücklicherweise 2019 hin bekommen alle meine (ca. 40) ESP Gerätschaften von Tasmota, Espeasy, Espurna und anderen custom Arduino sketches auf esphome zu migrieren.

              Seit dem habe ich die volle Kontrolle.

              Ich kann nicht nur jedem meiner ESP's aus der ferne neu starten oder herunterfahren, nein, ich sehe auch für alle meine ESP die aktuell verfügbaren System Informationen, angefangen vom online status über die WLAN Signalstärke, BSSID, SSID und IP. Außerdem die eingesetzte Hardware bzw. ESP Modul, Software Version sowie die Uptime. Zusätzlich werde diese Daten natürlich auch mitgeloggt. Alle Änderungen am ESP werden darüber hinaus natürlich over-the-air eingespielt.

              Wer sich einmal an diesen Luxus gewöhnt hat kommt davon nie wieder weg. 😁

              Nebenbei kann ich mit so vielen dezentralisierten Sensoren auch sehr gute Rückschlüsse ziehen, wie die WLAN Ausleuchte ist und wie sie sich durch eine Standoränderung des Access Points verändert. Oder wie sich auch nur eine leichte Ausrichtung der Antennen positiv (oder negativ) auf die gesamte WLAN Abdeckung auswirkt. Das ganze wohl gemerkt 'gratis', zusätzlich zur eigentlichen Aufgabe der ESP's, sei es simple LEDs wie hier, displays, cameras, thermostate, relays, power monitore oder jegliche weiteren denkbaren Sensoren und Aktoren 😉

              1 Reply Last reply Reply Quote 0
              • E
                Elektroman last edited by

                Hallo und frohes Neues!
                Mit so einer Resonanz habe ich nicht gerechnet, vielen Dank.
                Werde ich mir mal alles in ruhe anschauen

                1 Reply Last reply Reply Quote 0
                • Basti97
                  Basti97 Most Active last edited by

                  Ich finde MC lighting aber ich komme mit der Einstellung nicht klar. Gibt es eine fertige bin von Mclighting bzw wie man es einfacher flashen kann.
                  Danke im vorraus

                  G 1 Reply Last reply Reply Quote 0
                  • G
                    Gwenselah @Basti97 last edited by

                    @Basti97
                    Ich hab das damals nach der Anleitung von Tobi Blum gemacht: Link
                    Aber wie gesagt, lief nicht stabil, daher nun alles mit Tasmota gelöst

                    Basti97 1 Reply Last reply Reply Quote 0
                    • Basti97
                      Basti97 Most Active @Gwenselah last edited by

                      @Gwenselah Danke
                      Und wie hast du es auf Tasmota gelöst. Gibt es da auch fertige Modies. Da Tasmota auch einfacher wäre zu installieren.

                      1 Reply Last reply Reply Quote 0
                      • G
                        Gwenselah last edited by Gwenselah

                        Hier mal quick&dirty:
                        Gebaut hab ich das wie der gute Dennis es hier beschreibt: https://www.youtube.com/watch?v=gN2gJ3IYXpo&t=491s
                        Da ich aber kein Blockly Freund bin, hab ich ein Javascript entwickelt, welches per HTTP Request, die LEDs setzt.

                        Paar Infos dazu:
                        Ich setze sehr stark auf den LinkedDevices Adapter und schreibe dort den Datenpunkt "open" für die Türkontaktsensoren entsprechend um: false=geschlossen, true=offen. Die Datenpunkte existierten bereits und ich wollte hierfür keine neuen anlegen.
                        In ObjektLEDs wird die Zuordnung des Datenpunktes auf die LED definiert.
                        Mit den Variablen Doors,BoolDevicesTrueRED,BoolDevicesTrueGreen und Lights definiert man, wie sich die LED verhalten soll.
                        Für die Mülltonnen hab ich eine Sonderbehandlung, da ich mein Mülltonnenscript nicht komplett umbauen wollte.

                        Hier mein Script:

                        /*
                        BEI TASMOTA BEGINNT DIE ZÄHLUNG BEI 1 !!!
                        LED 29: Wohnzimmer linke Tür	LED 18:	Kai Türe				LED 17: Gästezimmer Türe	  	LED 6: Altpapaier 	LED 5: linke Waschmaschine 
                        LED 28: Wohnzimmer rechte Tür   LED 19: Kai Fenster     		LED 16: Gästezimmer Fenster     LED 7: Biomüll    	LED 4: rechte Waschmaschine
                        LED 27: Küche Fenster           LED 20: Lea Türe         		LED 15: Büro Fenster		    LED 8: Restmüll   	LED 3: Trockner   
                        LED 26: WC Fenster    			LED 21: Bad Fenster     		LED 14: Klimagerät              LED 9: Wertstoffe 	LED 2: Geschirrspüler 
                        LED 25: Waschküche Fenster      LED 22: Schlafzimmer Fenster	LED 13: Entertainment 			LED 10:				LED 1: 
                        LED 24: Keller Fenster          LED 23: Garagentor        		LED 12: 						LED 11:				LED 0: Gäste WLAN
                        */
                        
                        // Lichtfarbendefinition
                        //Originale Farbwerte: 
                        //var ColorOK = "10FF00"; //Grün
                        //var ColorWarning = "ffcb05"; //Orange bis Gelb
                        //var ColorError = "ff0000";  //Rot
                        //diese waren zu hell, durch Konvertierung auf HSL, dimmen auf ide Hälfte (L = 25%) und zurück nach RGB, ergibt:
                        var ColorOK = "043800"; //Grün
                        var ColorWarning = "806600"; //Orange bis Gelb
                        var ColorError = "800000";  //Rot
                        
                        //Gerätedefinition
                        var DisplayIP = "10.1.24.105";
                        
                        var ObjektLEDs = [
                            //BEI TASMOTA BEGINNT DIE ZÄHLUNG BEI 1 !!!
                            { Objekt: 'linkeddevices.0.Livingroom.wlanGuest', LED: '01' },
                            { Objekt: '', LED: '02' },    
                            { Objekt: 'linkeddevices.0.Kitchen.DisherStatusBinaer', LED: '03' },
                            { Objekt: 'linkeddevices.0.Washroom.DryerStatusBinaer', LED: '04' },
                            { Objekt: 'linkeddevices.0.Washroom.WasherRightStatusBinaer', LED: '05' },
                            { Objekt: 'linkeddevices.0.Washroom.WasherLeftStatusBinaer', LED: '06' },   
                            { Objekt: 'Altpapier', LED: '07' },   //Altpapier 
                            { Objekt: 'BioMuell', LED: '08' },    //Biomüll
                            { Objekt: 'RestMuell', LED: '09' },   //Restmüll
                            { Objekt: 'Wertstoffe', LED: '10' },  //Wertstoffe
                            { Objekt: '', LED: '11' },    
                            { Objekt: '', LED: '12' },    
                            { Objekt: '', LED: '13' },    
                            { Objekt: 'linkeddevices.0.Livingroom.ENTERTAINMENTstate', LED: '14' },
                            { Objekt: 'linkeddevices.0.Office.KLIMAGERAETstate', LED: '15' },  
                            { Objekt: '', LED: '16' },  
                            { Objekt: '', LED: '17' },   
                            { Objekt: 'linkeddevices.0.Guests.DoorOpened', LED: '18' },    
                            { Objekt: 'linkeddevices.0.Kai.DoorOpened', LED: '19' },    
                            { Objekt: 'linkeddevices.0.Kai.WindowOpened', LED: '20' },    
                            { Objekt: 'linkeddevices.0.Lea.DoorOpened', LED: '21' },    
                            { Objekt: 'linkeddevices.0.Bath.WindowOpened', LED: '22' },    
                            { Objekt: 'linkeddevices.0.Sleepingroom.opened', LED: '23' },    
                            { Objekt: 'linkeddevices.0.Garage.opened', LED: '24' },    
                            { Objekt: 'linkeddevices.0.Cellar.WindowOpened', LED: '25' },    
                            { Objekt: 'linkeddevices.0.Washroom.WindowOpened', LED: '26' },
                            { Objekt: 'linkeddevices.0.WC.WindowOpened', LED: '27' },
                            { Objekt: 'linkeddevices.0.Kitchen.opened', LED: '28' },
                            { Objekt: 'linkeddevices.0.Livingroom.DoorRightOpened', LED: '29' },
                            { Objekt: 'linkeddevices.0.Livingroom.DoorLeftOpened', LED: '30' }
                        ];  
                        
                        //Türen und Fenster
                        var Doors = ['linkeddevices.0.Livingroom.DoorLeftOpened','linkeddevices.0.Livingroom.DoorRightOpened','linkeddevices.0.Garage.opened','linkeddevices.0.Bath.WindowOpened',
                            'linkeddevices.0.Kitchen.opened','linkeddevices.0.Sleepingroom.opened','linkeddevices.0.Kai.DoorOpened','linkeddevices.0.Kai.WindowOpened','linkeddevices.0.Lea.DoorOpened',
                        	'linkeddevices.0.Cellar.WindowOpened','linkeddevices.0.Washroom.WindowOpened','linkeddevices.0.WC.WindowOpened','linkeddevices.0.Guests.DoorOpened'];
                        
                        var BoolDevicesTrueRED = ['linkeddevices.0.Office.KLIMAGERAETstate','linkeddevices.0.Livingroom.ENTERTAINMENTstate','linkeddevices.0.Livingroom.wlanGuest',
                        	'linkeddevices.0.Washroom.DryerStatusBinaer','linkeddevices.0.Washroom.WasherLeftStatusBinaer','linkeddevices.0.Washroom.WasherRightStatusBinaer','linkeddevices.0.Kitchen.DisherStatusBinaer']; //LED ist rot, wenn der Status dieses Gerätes TRUE ist
                        
                        var BoolDevicesTrueGreen = []; //LED ist grün, wenn der Status dieses Gerätes TRUE ist
                        
                        var Lights = []; //LED ist gelb, wenn die Lampe an ist, ansonsten aus
                        
                        // -----------------------------------------
                        function wait(ms){
                           var start = new Date().getTime();
                           var end = start;
                           while(end < start + ms) {
                             end = new Date().getTime();
                          }
                        }
                        
                        function RunRequest(URL){
                            try {
                                require("request")(URL).on("error", function (e) {console.error(e);});
                            } catch (e) { console.error(e); }
                        
                            console.log("Statusdisplay Request: " + URL);
                        
                        }
                        // --- Funktion für Einzelledsteuerung ----------------------------------------------------------
                        function SwitchLED (LEDNo, ColorCode) {
                        	if (getState('sonoff.0.Statusdisplay.POWER').val) {
                        		RunRequest("http://"+DisplayIP+"/cm?cmnd=Led"+LEDNo+"%20"+ColorCode);
                        	}
                        }
                        
                        function GetLedNo (DeviceTriggerName){
                            //log ("Dev: " + DeviceTriggerName);
                            for (var ObjektLED in ObjektLEDs) { //ObjektLED enthält nur eine Nummer und nicht das Element        
                                //log ("Name: " + ObjektLEDs[ObjektLED].Objekt);
                                if (ObjektLEDs[ObjektLED].Objekt == DeviceTriggerName) {
                                    return (ObjektLEDs[ObjektLED].LED);             
                                }
                            }    
                        }
                        
                        function SetBoolDevicesTrueRED (DeviceTriggerName, DeviceTriggerValue) {
                            if (DeviceTriggerValue == "true" || DeviceTriggerValue == "1" || DeviceTriggerValue == "läuft" ) {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorError);
                            } else {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorOK);
                            }
                        }
                        
                        function SetBoolDevicesTrueGreen (DeviceTriggerName, DeviceTriggerValue) {
                            if (DeviceTriggerValue == "true" || DeviceTriggerValue == "1") {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorOK);
                            } else {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorError);
                            }
                        }
                        
                        function SetDoorsLED (DeviceTriggerName, DeviceTriggerValue) {
                            if (DeviceTriggerValue == "geschlossen") {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorOK);
                            } else {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorError);
                            }
                        }
                        
                        function SetLightsLED (DeviceTriggerName, DeviceTriggerValue) {
                            if (DeviceTriggerValue) {
                                SwitchLED (GetLedNo(DeviceTriggerName),ColorWarning);
                            } else {
                                SwitchLED (GetLedNo(DeviceTriggerName),"000000");
                            }
                        }
                        
                        function SetMuelltonnenLights(){
                        	function SwitchGarbageLEDs(GarbageName,Days){
                        		if (Days == 0) {
                        			SwitchLED (GetLedNo(GarbageName),ColorError);
                        		} else if (Days == 1) {
                        			SwitchLED (GetLedNo(GarbageName),ColorWarning);
                        		} else {
                        			SwitchLED (GetLedNo(GarbageName),ColorOK);
                        		}
                        	}
                        	
                        	var RestMuellResttage = getState('Datenpunkte.0.Wertstoffe.Restmüll_Resttage').val;
                        	var BioMuellResttage = getState('Datenpunkte.0.Wertstoffe.Bio_Resttage').val;
                        	var AltpapierResttage = getState('Datenpunkte.0.Wertstoffe.Papier_Resttage').val;
                        	var WertstoffeResttage = getState('Datenpunkte.0.Wertstoffe.Wertstoffe_Resttage').val;
                        	
                        	SwitchGarbageLEDs("BioMuell",BioMuellResttage);
                        	SwitchGarbageLEDs("RestMuell",RestMuellResttage);
                        	SwitchGarbageLEDs("Altpapier",AltpapierResttage);
                        	SwitchGarbageLEDs("Wertstoffe",WertstoffeResttage);
                        	
                        }
                        
                        
                        // --- globale Displayfunktionen ----------------------------------------------------------------
                        
                        function ResetDisplay(){
                            setState('sonoff.0.StatusDisplay.Color','000000');
                            //setState('sonoff.0.StatusDisplay.POWER',false); //Power wird bei MQTT automatisch auf false gesetzt
                        }
                        
                        function SwitchOffDisplayDelayed(){
                            //setStateDelayed('sonoff.0.Statusdisplay.POWER',false,(1000 * 60)); //Angabe in Millisekunden
                        }
                        
                        
                        function SwitchOnOffDisplay(PowerOn){
                            if (PowerOn) {
                               RunRequest("http://"+DisplayIP+"/cm?cmnd=Power%20on");
                               log ("Status Display: Power On");
                            } else {
                               RunRequest("http://"+DisplayIP+"/cm?cmnd=Power%20off");
                               log ("Status Display: Power Off");
                            }
                        }
                        
                        function InitDisplay(){    
                            log ("+++ Statusdisplay Init");
                            //Option20 setzen: LED: ermöglicht den Dimmwert zu verändern, ohne die Versorgung einzuschalten (default = 0 / off)
                            RunRequest("http://"+DisplayIP+"/cm?cmnd=SetOption20%201");
                        
                            RunRequest("http://"+DisplayIP+"/cm?cmnd=fade%200");
                            RunRequest("http://"+DisplayIP+"/cm?cmnd=scheme%200");
                            wait (1000); //Milliseconds
                            //alle undefinierten LEDs löschen
                            for (i = 0; i < 30; i++) {   
                                //console.log ("------------------------------------------------------------");
                                //console.log(ObjektLEDs[i].Objekt + ": " + ObjektLEDs[i].Objekt.length);
                                if (ObjektLEDs[i].Objekt == '') {                        
                                    SwitchLED ((i+1),"000000");   
                                    wait (500); //Milliseconds          
                                }    
                            }
                        
                            if (Doors.length > 0) {
                                Doors.forEach(function(element) {
                                    SetDoorsLED(element,getState(element).val);
                                });
                            }
                            if (BoolDevicesTrueRED.length > 0) {
                                BoolDevicesTrueRED.forEach(function(element) {
                                    //var value = getState(element).val;
                                    //SetBoolDevicesTrueRED(element,value);
                                    SetBoolDevicesTrueRED(element,getState(element).val);
                                });
                            }
                            if (BoolDevicesTrueGreen.length > 0) {
                                BoolDevicesTrueGreen.forEach(function(element) {
                                    SetBoolDevicesTrueGreen(element,getState(element).val);
                                }); 
                            }   
                            if (Lights.length > 0) {
                                Lights.forEach(function(element) {
                                    SetLightsLED(element,getState(element).val);
                                }); 
                            }
                            SetMuelltonnenLights();
                        }
                        
                        // --- MAIN ---------------------------------------------------------------------------
                        on({id:'sonoff.0.Statusdisplay.POWER', change: 'ne'},(obj) => {
                            var value = obj.state.val;
                            log ("Statusdisplay - Power: " + value);
                            if (value) {
                                InitDisplay();    
                            }
                        });
                        
                        on({id: Doors, change: 'ne'},(obj) => {
                        	//setState('sonoff.0.StatusDisplay.POWER',true)
                            var value = obj.state.val;
                            var objArr  = obj.id.match(/(^.+)\.(.+)\.(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
                            //var DeviceID=objArr[1]+"."+objArr[2];
                            //var DeviceName=objArr[2];
                            /*console.log("Trigger: " + objArr[0]);
                            console.log("Pfad: " + objArr[1]);
                            console.log("Devic);name: " + objArr[2]);
                            console.log("localDeviceID:"+DeviceID);*/
                            SetDoorsLED(objArr[0],value);
                        	SwitchOffDisplayDelayed();
                        });
                        on({id: BoolDevicesTrueRED, change: 'ne'},(obj) => {
                        	//setState('sonoff.0.StatusDisplay.POWER'/*Turn On/Off*/,true)
                            var value = obj.state.val;
                            var objArr  = obj.id.match(/(^.+)\.(.+)\.(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
                            SetBoolDevicesTrueRED(objArr[0],value);
                        	SwitchOffDisplayDelayed();
                            
                        });
                        on({id: BoolDevicesTrueGreen, change: 'ne'},(obj) => {
                        	//setState('sonoff.0.StatusDisplay.POWER'/*Turn On/Off*/,true)
                            var value = obj.state.val;
                            var objArr  = obj.id.match(/(^.+)\.(.+)\.(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
                            SetBoolDevicesTrueGreen(objArr[0],value);
                        	SwitchOffDisplayDelayed();
                            
                        });
                        on({id: Lights, change: 'ne'},(obj) => {
                        	//setState('sonoff.0.StatusDisplay.POWER'/*Turn On/Off*/,true)
                            //InitDisplay();
                            var value = obj.state.val;
                            var objArr  = obj.id.match(/(^.+)\.(.+)\.(.+)$/, ""); //Aufteilung in Pfad + Device + CMD
                            SetLightsLED(objArr[0],value);
                        	SwitchOffDisplayDelayed();
                            
                        });
                        
                        
                        //-- Inits --
                        if (getState('linkeddevices.0.Diningroom.StatusdisplayPOWER').val == false) {
                            //setState('linkeddevices.0.Diningroom.StatusdisplayPOWER',true); //Power True triggert "InitDisplay()"
                            SwitchOnOffDisplay(true);
                        } else {
                            InitDisplay();
                        }
                        
                        //Display AN/AUS Steuerung
                        
                        on({id: 'javascript.0.Astro.Astrotag',val: true}, function(){
                        	//Wenn es Tag wird Display anschalten
                        	if (getState('linkeddevices.0.Diningroom.StatusdisplayPOWER').val == false) {
                        		SwitchOnOffDisplay(true);
                        	}
                        })
                        
                        on({id: 'linkeddevices.0.Diningroom.CEILINGSWITCHSwitch', change: 'ne'}, function() {
                        	//Wenn es Nacht ist, wird das Display mit der Deckenlampe geschaltet
                        	if (getState('javascript.0.Astro.Astrotag').val == false) {
                        		SwitchOnOffDisplay(getState('linkeddevices.0.Diningroom.CEILINGSWITCHSwitch').val);
                        	}
                        })
                        
                        //schedule('0 6 * * *', function(){SwitchOnOffDisplay(true)});
                        schedule('55 22 * * *',  function(){SwitchOnOffDisplay(false)}); //zur Sicherheit trotzdem um 23 Uhr ausschalten
                        schedule('1 6 * * *', SetMuelltonnenLights);
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        867
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        6
                        13
                        1670
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo