Govee Geräte via UDP Lan API steuern

Hallo, ich bin gerade dabei die LAN API in Symcon so umzusetzen, dass ich die JSON Befehle eben an die Geräte senden kann. Ich stehe nun vor der Herausforderung wie ich diese dann auch steuerbar machen kann… ich hab mir nu mal eine Instanz „Json Values“ angelegt und mal ein paar Befehle hinterlegt. Dann müsste ich diese Instanz wohl mit einem UDP Socket verbinden ich bin mir da mit den Settings nur nicht so ganz klar. Auf Port 4002 soll ich einen UDP Socket am IPS Server erstellen und dann am Port 4003 wiederum nach Antworten lauschen, welche dann ja wiederum in die JSON Values übergeben werden müssten.

Um dann diesen Befehl irgendwie absetzen zu können → (Doku Govee)

Dann müsste ich ja noch einen Scan Befehl an eine Multicast Adresse senden… bin mir irgendwie nicht ganz sicher ab wann man dann nun die Client IP nutzt und wann die Multicast? Uff :smiley:

Muss das dann via dem Multicast Socket laufen?

Habt ihr eine Idee?

Bist du schon weiter? Auf meinem Einkaufszettel stehen ein paar Govee Lampen.

Nicht wirklich… immerhin hab ich es mit statischen Scripten geschafft Geräte ein und aus zu schalten :D… und habe verstanden, dass ich lediglich die Befehle via UDP an die IP des Gerätes senden muss.

Hi,
ich habe eine Govee Lampe erstanden.
Die Ansteuerung über UDP konnte ich realisieren, da ich nur eine Lampe habe reicht mir das erstmal.
Falls bei euch noch Interesse besteht, sende ich gerne die Skripte

Das wäre interessant, darauf könnte ich aufbauen. Ich habs zumindest geschafft, dass ich mein Govee Light Strip M1 via eines Node-Red Umweges ein&ausschalten kann. Grüße

Hallo zusammen,
bei mir geht es direkt über Symcon.
Zuvor in der APP die LAN API aktivieren.

Dei Schritte die ich gemacht habe.
a) IP: Adresse der Lampe ermitteln (bei mir 192.168.3.155)
b) Dummy Instanz angelegt (Govee)
c) 3 Variable angelegten unter der Dummy Instanz
Status (Bool), Farbe (Interger) / Helligkeit (Interger)
d) UPD Socket eröffnet


e) Script mit folgenden Inhalt unter der Dummy Instanz erstellt: (Govee Aktualisieren)

<?php
$id_UPD_Socket = 55068;
$id_Status = 28942;
$id_Helligkeit = 39949;
$id_Farbe = 12979;


//echo $_IPS['SENDER'];

if ($_IPS['SENDER'] == "RegisterVariable")
{
    $array_govee = json_decode($_IPS['VALUE'], true);
    
    if ( $array_govee["msg"]["cmd"] == "devStatus" )
    {
        SetValueBoolean($id_Status, $array_govee["msg"]["data"]["onOff"]);
        SetValueInteger($id_Helligkeit, $array_govee["msg"]["data"]["brightness"]);
    
        $r =  $array_govee["msg"]["data"]["color"]["r"];
        $g =  $array_govee["msg"]["data"]["color"]["g"];
        $b =  $array_govee["msg"]["data"]["color"]["b"];

        $color = (int) ( ($r * 256 * 256) + ($g * 256) + $b);

        SetValueInteger($id_Farbe, $color);
    }
    else
    {
        echo "Govee andere Meldung";
    }
}

if ($_IPS['SENDER'] == 'Execute')
{
    $govee_message = '{ "msg" :{ "cmd" : "devStatus", "data" :{} }} ';
    USCK_SendText($id_UPD_Socket, $govee_message);
}

if ($_IPS['SENDER'] == 'RunScript')
{
    //$govee_message = '{ "msg" :{ "cmd" : "devStatus", "data" :{} }} ';
    //USCK_SendText(55068, $govee_message);
    IPS_SetScriptTimer($_IPS['SELF'], 1);
}

if ($_IPS['SENDER'] == 'TimerEvent')
{
    $govee_message = '{ "msg" :{ "cmd" : "devStatus", "data" :{} }} ';
    USCK_SendText($id_UPD_Socket, $govee_message);
    IPS_SetScriptTimer($_IPS['SELF'], 0);
}


f) Register Variable unter der Dummy Instanz angelegt und mit UPD Port und Script verknüpft

g) Aktionsskripte unter die Variablen gelegt:
G1) Unter Status:

<?php

if ($_IPS['VALUE'])
{
   $value = 1;
}
else
{
    $value = 0;
}

$govee_message = '{ "msg" :{ "cmd" : "turn", "data" : { "value":' . $value . ' }}} ';
USCK_SendText(55068, $govee_message);

IPS_RunScript(50050);

G2 Helligkeit:

<?php

if ($_IPS['VALUE'] > 0) 
{
    if ($_IPS['VALUE'] < 100)
    {
        $value = $_IPS['VALUE'];
    }
    else
    {
        $value = 100;
    }
    $govee_message = '{ "msg" :{ "cmd" : "turn", "data" : { "value":' . 1 . ' }}} ';
    $govee_message = '{ "msg" :{ "cmd" : "brightness", "data" : { "value":' . $value . ' }}} ';

}
else
{
    $value = 0;
    $govee_message = '{ "msg" :{ "cmd" : "turn", "data" : { "value":' . $value . ' }}} ';
}


USCK_SendText(55068, $govee_message);
IPS_RunScript(50050);
tippe oder füge den Code hier ein

G3 Farbe:

<?php

$r = (int) ( ($_IPS['VALUE'] / 256 / 256) );
$g = (int) ( ($_IPS['VALUE'] - ($r*256*256)) / 256 );
$b = (int) ( $_IPS['VALUE'] - ($r*256*256) - $g*256) ;

$govee_message = '{ "msg" :{
                               "cmd":"colorwc", 
                               "data":  { 
                                    "color": { 
                                      "r": '.  $r . ', 
                                      "g": ' . $g . ', 
                                      "b": ' . $b . '
                                      }
                                      , 
                                      "colorTemInKelvin":0 
                                    }
                                }
                            }' ;

USCK_SendText(55068, $govee_message);

IPS_RunScript(50050);
1 „Gefällt mir“

Hey Jan, das funktioniert einwandfrei! Der Script Timer läuft bei mir auf Fehler, weshalb auch immer. Wenn ich manuell ein zyklisches Ereignis erstelle sagen wir alle 10 Sek. dann aktualisiert es auch den Wert (status usw). Danke dir!

Hi,
das klingt ja supi,
was für ein Fehler entsteht bei beim Timer?

Es gibt nun ein Modul: [Modul] Govee

Grüße,
Kai