MiLight über ESP8266

Super, vielen Dank! Ich werde die Lampen erstmal über einfache Scripte für Szenen einbinden, die dann die jeweiligen Befehle auf die Devices publishen. Melde dich gerne, wenn du noch Debugs brauchst, ich etwas testen soll oder sowas!

Gruß

Kannst du was zu den unterschiedlichen Modi sagen?

Grüße,
Kai

Hi,
das sind meines Wissens nach verschieden, vorprogrammierte „Disco“ Modi. Sprich z.B. vorprogrammierte Lauflichter etc., die zusätzlich in der Geschwindigkeit variiert werden können. Soweit ich weiß, unterstützen das aber nicht alle MiLight Geräte. Ich habe es noch nie genutzt, da ich eher ein Fan statischer Beleuchtung bin. Für mich wären die Modi dementsprechend nicht relevant, oder meintest du andere Modi?

Gruß

Sorry, ich meine den device_type.
Gibt es da eine vernünftige Übersicht für?

Grüße,
Kai

Hi,
ich habe dazu mal eine Übersicht angehängt. Das heißt für die Modi konkret:

RGBW: RGB + Weiß Devices

CCT: Warmweiß + Kaltweiß Devices (Dual LED)

RGB + CCT: RGB + Warmweiß + Kaltweiß Devices

RGB: RGB Devices

FUT089 / B8: Wie RGB + CCT, jedoch mit 8 statt 4 Zonen. Scheinbar für neuere Geräte nötig.

FUT091 / B2: Wie CCT, jedoch scheinbar eine neue Protokollversion

Kannst du mit der Info soweit etwas anfangen?

Also sollte im Modul einstellbar sein, welcher Modus genutzt wird?
Welchen Modus nutzt du, dann würde ich damit anfangen.

Grüße,
Kai

Ich denke das würde für jedes angelegte Device in der entsprechenden Instanz Sinn machen, genau. Ich nutze aktuell ausschließlich RGB+CCT.

Hallo Luca, Kai,

eine schicke Lösung die du hier vorstellst, ich nutze seit einiger Zeit Milight E27 Lampen und die RGBW LED Module. Das im Forum vorgestellt Milight Modul (das erste) funktioniert seit langen bei mir sehr gut, mit dem Limit auf 4 Kanäle bzw. 4 Bereiche.
Die Lösung mit einem WEMOS D1 und dem NRF24L01 habe ich mir heute nachgebaut und Funktioniert, schöne Lösung. Die Verbindung ESP > MQTT > IPS verstehe ich noch nicht so ganz. Kai du implementierst es in das Tasmota Modul? Wenn es hilft teste ich es gerne, bei mir sind wie schon geschrieben RGBW und zwar E27 und LED Module in Betrieb.
Die Eingaben die in dem ESP für MQTT gemacht werden müssen sind mir auch nicht alle klar, ich bin dabei wenn ich helfen kann.

alles Gute D.Voss

Hallo Zusammen,

gibt es hierzu schon etwas Neues?
Habe auch schon so ein Gateway aufgesetzt:
https://blog.christophermullins.com/2017/02/11/milight-wifi-gateway-emulator-on-an-esp8266/
Ging ganz einfach, Zeit für die Realisierung ca. 10 Minuten, Kosten unter EUR 10.

Habe auch schon die Topics per MQTT in IPS, allerdings scheitere ich an der Rückmeldung:
Sofern ich MQTT richtig verstanden habe, ändere ich die Inhalt der Topic-Variable auf dem Server und der Client bekommt es mit?

Mit einem:

$ID =   28904;
RequestAction ($ID, "{"state":"ON","brightness":255,"bulb_mode":"color","color":{"r":255,"g":0,"b":46}}"  );

bekomme ich immer diese Fehlermeldung:

Parse error:  syntax error, unexpected 'state' (T_STRING), expecting ')' in C:\ProgramData\Symcon\scripts\55926.ips.php on line 6
Abort Processing during Fatal-Error: syntax error, unexpected 'state' (T_STRING), expecting ')'

mit

$ID =   28904;
RequestAction ($ID, "bla"  );

wird die Variable gesetzt.
Wenn ich die Variable per Hand auf der Konsole setzte, wird dies auch nicht an die Lampe übertragen.
Im Wireshark sehe ich, daß die Werte per MQTT übertragen werden:

milight/0x0/rgb_cct/1blablub

Wobei ich nach der ganzen Frickelei keine Pakete mehr vom IPS in Richtung Bridge sehe …

Vielleicht kann ja jemand einen Schubs in die richtige Richtung geben …

Dank und Gruß

kea

PS Anbei noch ein Screenshot der Birdge-Konfiguration

1 „Gefällt mir“

Hallo Zusammen,

hab mich mal ein bisschen mit dem System beschäftigt und werfe mal ein paar Brocken in den Thread.

  1. Bau des Gateways (Materialkosten keine €5), siehe oben oder direkt https://github.com/sidoh/esp8266_milight_hub.

  2. MQTT Server in IPS aktivieren

  3. ESP-Bridge einstellen (siehe Bild esp.png)

  4. Lampen an das Gateway anlernen,
    Wichtig: Jeder Lampe eine eigene ID verpassen (siehe anlern.png) und den „Remote Type“ „FUT089/B8“ auswählen, dann sind 8 Gruppen möglich.

  5. Die Lampen bei Bedarf an weitere Steuerelemente anlernen

  6. Die Lampen mal schalten/steuern

  7. Jetzt sollte beim IPS schon was ankommen: MQTT lässt sich gut mit dem http://mqtt-explorer.com/ prüfen, einfach auf den IPS-Server zeigen lassen. (siehe mqttexplorer.png)

  8. Nun im IPS mit dem MQTT Konfigurator die Instanz anlegen
    Obacht! Es gibt mehrer Topics für eine Lampe:
    a) die oben vergebene ID (diese wird auch zum Steuern genutzt)
    b) die ID der Fernbedienung
    c) ggf, mehrer Gruppen-ID
    Lässt sich gut mit dem MQTT Explorer erkennen

  9. Nun die Variablen anlegen (siehe Bild ipsvar.png). Hier sind die Variablendefinitionen:

// Profile erstellen
// MiLiState
IPS_CreateVariableProfile("MiLiState", 1);
IPS_SetVariableProfileText("MiLiState", "", "");
IPS_SetVariableProfileValues("MiLiState", 0, 3, 1);
IPS_SetVariableProfileDigits("MiLiState", 0);
IPS_SetVariableProfileIcon("MiLiState", "");
IPS_SetVariableProfileAssociation("MiLiState", 0, "Aus", "", 16711680);
IPS_SetVariableProfileAssociation("MiLiState", 1, "Ein", "", 65280);
IPS_SetVariableProfileAssociation("MiLiState", 2, "Nacht", "", 160);
IPS_SetVariableProfileAssociation("MiLiState", 3, "Putzlicht", "", 16777215);
// MiLiBulbMode
IPS_CreateVariableProfile("MiLiBulbMode", 1);
IPS_SetVariableProfileText("MiLiBulbMode", "", "");
IPS_SetVariableProfileValues("MiLiBulbMode", 0, 0, 0);
IPS_SetVariableProfileDigits("MiLiBulbMode", 0);
IPS_SetVariableProfileIcon("MiLiBulbMode", "");
IPS_SetVariableProfileAssociation("MiLiBulbMode", 0, "White", "", -1);
IPS_SetVariableProfileAssociation("MiLiBulbMode", 1, "Color", "", -1);
IPS_SetVariableProfileAssociation("MiLiBulbMode", 2, "Scene", "", -1);
IPS_SetVariableProfileAssociation("MiLiBulbMode", 3, "Night", "", -1);
// MiLiScene
IPS_CreateVariableProfile("MiLiScene", 1);
IPS_SetVariableProfileText("MiLiScene", "", "");
IPS_SetVariableProfileValues("MiLiScene", 0, 8, 0);
IPS_SetVariableProfileDigits("MiLiScene", 0);
IPS_SetVariableProfileIcon("MiLiScene", "");
IPS_SetVariableProfileAssociation("MiLiScene", 0, "All Colors Smooth", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 1, "White only", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 2, "Red Green Blue smooth", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 3, "All Colors Hard", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 4, "All colors hard II", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 5, "Red show", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 6, "Green show", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 7, "Blue show", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 8, "White show", "", -1);
IPS_SetVariableProfileAssociation("MiLiScene", 9, "RGB Circle fade", "", -1);
// MiLiColorTemp_2
IPS_CreateVariableProfile("MiLiColorTemp_2", 1);
IPS_SetVariableProfileText("MiLiColorTemp_2", "", "");
IPS_SetVariableProfileValues("MiLiColorTemp_2", 153, 370, 25);
IPS_SetVariableProfileDigits("MiLiColorTemp_2", 0);
IPS_SetVariableProfileIcon("MiLiColorTemp_2", "");
// MiLi_Brightness
IPS_CreateVariableProfile("MiLi_Brightness", 1);
IPS_SetVariableProfileText("MiLi_Brightness", "", "");
IPS_SetVariableProfileValues("MiLi_Brightness", 0, 255, 0);
IPS_SetVariableProfileDigits("MiLi_Brightness", 0);
IPS_SetVariableProfileIcon("MiLi_Brightness", "");

  1. Ein Auswertescript an die benötigten Variablen setzen (bei sind es zwei Variablen):
<?php

// 0.9  2020-08-23  soe (start of engeneering)

if ($_IPS['SENDER'] == "Variable" or $_IPS['SENDER'] =='TimerEvent')
    {
   	$SenderTyp = $_IPS['SENDER'];
   	$SenderID = $_IPS['VARIABLE'];    // alt EVENT
   	}
 
// Variablendefinition

$BulbID         =   35518;
$BulbValue      =   47287;
$Chroma         =   35703;
$Mode           =   55368;
$White          =   43243;       // scene white color
$State          =   30279;
$Luma           =   43777;
$Scene			=	45228;  // mode 0 - 9

if ($_IPS['SENDER'] == "Variable") {                         // script wird von einer Variable getriggert
// Werte lesen 
	$IN    	=    GetValue($SenderID);                       // org Bulb Value
	$json 	= 	json_decode($IN);
    	
	// var_dump($json);      // nur zum debug, erzeugt sonst einen fehler
	
	// State auswerten
	IF ($json->state == "OFF" or $json->state == "off") {
        SetValue ($State, 0);

    }		
	// Weitere Ablauf nur wenn Lampe an
	    IF ($json->state == "ON" or $json->state == "on") 	{
            SetValue ($State, 1);		
		    SetValue ($Luma, $json->brightness);// Brightness auswerten
				// Mode auswerten
			IF ($json->bulb_mode == "white") 			{ 
	                        SetValue ($Chroma, 0);
				SetValue ($Mode, 0);  
				SetValue ($White,$json->color_temp);
			}
			IF ($json->bulb_mode == "night")			{
				SetValue ($Mode, 3);
                SetValue ($State, 2);							// Nachtmodus
			}
			IF ($json->bulb_mode == "color")  			{
				SetValue ($Mode, 1); 
				// RGB lesen, Einzelwerte nach RGB-Hex umrechnen
				$RGB = hexdec(str_pad(dechex($json->color->r), 
					2,'0', STR_PAD_LEFT).str_pad(dechex($json->color->g), 
					2,'0', STR_PAD_LEFT).str_pad(dechex($json->color->b), 
					2,'0', STR_PAD_LEFT));
				SetValue ($Chroma, $RGB);
			}
			IF ($json->bulb_mode == "scene")  			{
				SetValue ($DebugID, $json);
				SetValue ($Mode, 2);
				IF ($json->mode == "0")  SetValue($Scene, 0);
				IF ($json->mode == "1")  SetValue($Scene, 1);
				IF ($json->mode == "2")  SetValue($Scene, 2);
				IF ($json->mode == "3")  SetValue($Scene, 3);
				IF ($json->mode == "4")  SetValue($Scene, 4);
				IF ($json->mode == "5")  SetValue($Scene, 5);
				IF ($json->mode == "6")  SetValue($Scene, 6);
				IF ($json->mode == "7")  SetValue($Scene, 7);
				IF ($json->mode == "8")  SetValue($Scene, 8);
                IF ($json->mode == "9")  SetValue($Scene, 9);
			}
		} 	
	exit;
	}
	
	
  1. Aktionsscripte an die Variablen hängen:

<?php
// Milight_Brigthness setzen
$parentID 		= 	IPS_GetObject($IPS_SELF);
$parentID 		= 	$parentID['ParentID'];
$Luma	   		= 	( $_IPS['VALUE']);
$BulbValue 		=   47287;
RequestAction ($BulbValue, "{\"state\":\"ON\",\"brightness\":\"$Luma\"}" );


<?php
//Milight_aus_Farbrad setzen
$Chroma    		= 	35703;
$BulbValue 		=   47287;
$r 				= 	(($_IPS['VALUE'] >> 16) & 0xFF);
$g 				= 	(($_IPS['VALUE'] >> 8) & 0xFF);
$b 				= 	(($_IPS['VALUE'] >> 0) & 0xFF);
RequestAction ($BulbValue, "{\"state\":\"ON\",\"color\":{\"r\":$r,\"g\":$g,\"b\":$b}}"  );


<?php
//Milight_ColorTemp
$White	    	= 	($_IPS['VALUE']);
$BulbValue 		=    47287;
RequestAction ($BulbValue, "{\"state\":\"ON\",\"color_temp\":\"$White\"}" );



<?
// Milight_State setzen
$parentID 		= 	IPS_GetObject($IPS_SELF);
$parentID 		= 	$parentID['ParentID'];
$State	    	= 	($_IPS['VALUE']);
$BulbValue 		=   47287;
if ($State == 0)    RequestAction ($BulbValue,  "{\"state\":\"OFF\"}"  );
if ($State == 1)    RequestAction ($BulbValue,  "{\"state\":\"ON\"}" );
if ($State == 2)    RequestAction ($BulbValue,  "{\"state\":\"ON\",\"command\":\"night_mode\"}" );   // Nachtlich
if ($State == 3)    RequestAction ($BulbValue,  "{\"state\":\"ON\",\"command\":\"set_white\",\"brightness\":255 }" );   // Putzlicht


<?php
//Milight_Scene
$Scene	    	= 	($_IPS['VALUE']);
$BulbValue 		=   47287;
RequestAction ($BulbValue, "{\"state\":\"ON\",\"mode\":\"$Scene\"}" );

Ein Schönheitspreis werde ich damit nicht gewinnen, aber vielleicht nützt es Euch etwas.

Bin noch am überlegen wie ich die Skalierung mache, entweder für jede Lampe/Bulb/LED-Streifen alles per Hand anlegen oder das Master-Script um eine Auswertung erweitern.

Viel Spaß am Gerät

kea

Hi,
sieht gut aus, ich hatte das damals dann zwischenzeitlich ähnlich gelöst, jedoch nur die Parameter übergeben, die ich persönlich nutze - ich werde deine Variante mal testen - vielen Dank fürs Teilen!

Gruß

Hallo @kea ,
irgendwie sind im neuen Board leider deine Bilder abhanden gekommen :confused:
Kannst du die bitte nochmal posten, damit ich sehe wo du die Variablen und die Skripte angelegt hast.

Danke Hofi61

Anbei die Bilder erneut.


@hofi61 Bitte gerne.

Hallo @kea,

vielen Dank. Inzwischen hab ich es hinbekommen und das GW lässt sich über das Webinterface vom ESP schalten und die Variablen in IPS werden auch gesetzt.
Hast du eine Lösung wie die MiLight auch über ein PHP-Skript ansteuern kann?
Mit dem MQTT-Explorer kann ich zwar sehen, dass gesendet wird aber das GW reagiert nicht.
Im Prinzip nutze ich deine Aktionsscripte leicht modifiziert und triggre diese mit einer Variablen die den Befehl enthält. Getestet am Beispiel State, Variabe = 0 im Explorer kommt auch " rgb_cct = {„state“:„OFF“}" an, aber nichts passiert…

VG Hofi61

PS. Dem Problem mit den fehlenden Bildern ist paresy schon auf der Spur.

Hallo,
ich benötige mal eure Hilfe. Ich habe mir einen MiLight-Hub wie hier https://community.symcon.de/t/milight-ueber-esp8266/50102/16?u=hofi61 aufgebaut und in IPS eingebunden.
Der Hub funktioniert, von dessen Webinterface kann ich meine Geräte steuern. Die MQTT-Konfiguration am Hub sieht wie folgt aus:

In IPS hab ich den MQTT-Server aktiviert und mit dem Konfigurator folgende beiden Geräte eingerichtet:
image

Die beiden Variablen werden auch bei Veränderungen am Hub korrekt befüllt und die angelegten Statusvariablen erhalten auch die korrekten Werte. Das Empfangen der MQTT-Befehle funktioniert also.
Aber beim Senden reagieren die Leuchten nicht auf die Befehle. Am MQTT-Explorer, der auf IPS hört, kann ich aber die korrekten Befehle sehen (Beispiel State = ON):

Die Steuerung in IPS habe ich wie folgt aufgebaut:

Die Skripte werden beim Verändern der Variablen getriggert, hier als Beispiel das Skript für die State Variable:

<?php

// Milight_State setzen
$State	    	= 	($_IPS['VALUE']);
$BulbValue 		=   42168;
if ($State == 0)    RequestAction ($BulbValue,  "{\"state\":\"OFF\"}"  );
if ($State == 1)    RequestAction ($BulbValue,  "{\"state\":\"ON\"}" );
if ($State == 2)    RequestAction ($BulbValue,  "{\"state\":\"ON\",\"command\":\"night_mode\"}" );   // Nachtlich
if ($State == 3)    RequestAction ($BulbValue,  "{\"state\":\"ON\",\"command\":\"set_white\",\"brightness\":255 }" );   // Putzlicht

Warum funktioniert das Senden nicht bzw. warum reagiert der Hub nicht? Ich habe schon überall gesucht, finde aber keinen Ansatz und im oben genannten Beitrag reagiert keiner auf meine diesbezüglich Frage :face_with_head_bandage:

Ich hoffe hier kann mir jemand auf die Sprünge helfen :smile: :smile: :smile:
Schon mal vielen Dank im Voraus!

PS. mein IPS läuft im Docker meiner Synology, da bin ich bei der Aktivierung des MQTT-Servers schon gestolpert, da das Port nicht veröffentlicht war :wink:

VG Hofi61

Moin,
sorry für die späte Antwort.
Melde mal eine Fernbedienung an den Bulbs an und beobachte den MQTT-Server bei der Nutzung der Fernbedienung. Es ändern sich mehrere Topics, da müsstest Du mal ein bißchen testen, welches Topic zu ändern ist.
War bei mir auch arges Gefummel, habe zwar 15 Bulbs verbaut aber noch nicht integriert. Die Strafarbeit wartet noch auf mich :frowning:
Viele Grüße

Hi Hofi61,

I hope English is ok with you?!

Did you ever get IPS to send mqtt messages (I read your post through Google translate)?

I can get IPS to receive mqtt but I cant get it to send, do you have any pointers?!

yoggi

Hi,
hat sich jemand die Arbeit gemacht ein Modul zu erstellen?
Wäre klasse.

Hi,
Habe versucht nach der Anleitung hier die Anbindungin Symcon zu erstellen.
https://community.symcon.de/t/milight-ueber-esp8266/50102/16
Bis Punkt 7 funktioniert alles, ich sehe die Daten im MQTT Explorer.

Punkt 8 habe ich ein MQTT Client Gerät angelegt, ist das richtig?
Werte bekomme ich nicht angezeigt

Die Konfiguration sieht so aus

Hat jemand einen Tipp, was ich falsch mache?

Grüße Christoph

Hatte das Topic falsch.
Empfangen funktioniert jetzt.

Jetzt habe ich das gleiche Problem wie Hofi61, senden geht nicht.
@hofi61 bist du hier weiter gekommen?

Gruß Christoph