FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: harle am 11 November 2021, 18:36:41

Titel: "Zufälligen" hex Wert generieren
Beitrag von: harle am 11 November 2021, 18:36:41
Hallo liebe alle,

vorab, ich habe leider nur rudimentäre Programmierkenntnisse (das wird man gleich lesen), benutze FHEM zwar schon lange, aber erst jetzt möchte ich Bedingungen implementieren und stoße am meine Grenzen mit perl.

ich habe eine Philips Hue Go an die ich einen hex Farbcode senden kann und diese entsprechend die Farbe wechselt.

Ich habe mir schon ein at erstellt, welches alle X Minuten einen zufälligen hex Wert generieren und senden soll.

Ich hatte im Forum etwas Code ergoogled und mir dann gedacht, hex hat 6 Stellen, schickst du halt mit

set Philips_Hue_Go_1 hex {(int(rand(999998))+1)}

immer maximal 999999 an die Lampe.

Das funktioniert zu meiner Überraschung auch, bis - so meine Vermutung - ein "invalid value" generiert wird und die Hue dann keine Änderungen mehr mit sich machen lässt, bis ich den ganzen Rpi neu starte.

Könnt ihr mir auf die Sprünge helfen, was der Fehlergrund ist?


Viele Grüße
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: bartman121 am 11 November 2021, 22:04:27
also ich bin kein Profi, aber gehen müsste das ... Achtung, das ist direkt perl, dafür könnte es aber alle möglichen Farbcodes erzeugen.

{
my $hex = sprintf("%X", int(rand(256))).sprintf("%X", int(rand(256))).sprintf("%X", int(rand(256)));;
fhem("set Philips_Hue_Go_1 hex $hex");;
}
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 12 November 2021, 09:13:06
Besten Dank, das funktioniert.
Nur mal nachgehackt, kann man den Hexwert auch direkt übergeben oder sollte/muss man den umweg über die Variable $hex gehen?

/e: Ja, das funktioniert offenbar, ich habe es so gemacht und es scheint zu laufen:

set Philips_Hue_Go_1 hex {(sprintf("%X%X%X", int(rand(256)), int(rand(256)), int(rand(256))))}
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: bartman121 am 12 November 2021, 13:17:36
Sehr schön...

Ich würde sagen bei meinem Code knallt es auch irgendwann wieder.... Nämlich dann wenn int(256) eine Zahl kleiner 16 liefert.... Weil du dann nur ein Hex-zeichen bekommst....

Das musst du noch sinnvoll lösen...

Hab im Moment keine Idee dafür
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: OdfFhem am 12 November 2021, 14:49:54

%02X


0 heißt mit Nullen auffüllen
2 ist die gewünschte Gesamtlänge
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 13 November 2021, 09:03:06
Guten Morgen,

darf ich hier nochmal zum Verständnis nachfragen:

Wenn ich

+*00:05:00 set Philips_Hue_Go_1 hex {{{(sprintf("%02X%02X%02X", int(rand(256)), int(rand(256)), int(rand(256))))}}

übergeben möchte funktioniert es nicht (Lampe nur blau). Wo liegt der Fehler in meinem Syntax, um die Korrektur von OdfFhem einbauen zu können?


Vielen Dank!
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: bartman121 am 13 November 2021, 09:46:41
ich befürchte, dass rand(xxx) nur bei der Timer-Definition ausgeführt wird. Das liegt halt in der Art und weise wie FHEM arbeitet.

Ich würde empfehlen den Befehl in eine myUtils-Routine auszulagern und im Timer diese Routine aufzurufen.

Viel Erfolg
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 13 November 2021, 11:16:12
Hallo zusammen,
ich habe nun

# Enter you functions below _this_ line.

my $hex = sprintf("%02X", int(rand(256))).sprintf("%02X", int(rand(256))).sprintf("%02X", int(rand(256)));;


1;


so in meine myUtils integiert.

Ob dies so korrekt ist und wie ich das in einen Aufruf zum Schalten der Lampenfarbe integriere ist mir noch nicht schlussendlich klar.

Ich hoffe, die Diskussion kann hier noch weitergehen und das Ergebnis kann zukünftig in ähnlichen Fällen weiterhelfen.
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: bartman121 am 13 November 2021, 12:02:36
so geht's  natürlich nicht ....

da fehlt ein bisschen was ...


sub generate_random_hexcolor() {
my $hex = sprintf("%02X", int(rand(256))).sprintf("%02X", int(rand(256))).sprintf("%02X", int(rand(256)));;
return $hex;
}


deine Timerdefinition müsste dann so aussehen ...


define at_huo_go_1_randomhex +*00:05:00 set Philips_Hue_Go_1 hex {generate_random_hexcolor()}


Ich hoffe das funktioniert so ...

Grundsätzlich wäre noch zu prüfen ob man das nicht besser mit https://metacpan.org/pod/Color::Rgb zu lösen wäre.

Vielleicht kommt ja noch ein Profi um die Ecke...
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 13 November 2021, 15:08:30
Hi zurück,

vielen Dank für deine Hilfe.

Ich habe es jetzt zwei Stunden probiert, egal welcher Code in der myUtils steht, der Aufruf von

set Philips_Hue_Go_1 hex {generate_random_hexcolor()} setzt die Lampe auf blau.

Der direkte Aufruf

set Philips_Hue_Go_1 hex {(sprintf("%02X%02X%02X", int(rand(256)), int(rand(256)), int(rand(256))))}

funktioniert oder ist hier die Syntax falsch?




Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: Wernieman am 13 November 2021, 16:33:31
Was gibt denn ein "{generate_random_hexcolor()}" in der Eingabezeile von FHEM?
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 13 November 2021, 16:47:51
Da kommt ein Hex Code raus.  :o ???
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: Wernieman am 13 November 2021, 16:48:49
Jedes mal ein Zufällig neuer?
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: Der_Tom am 13 November 2021, 16:55:39
an was für eine Bridge ist denn die GO angelernt ?

ich tue mich mit dem Befehl "hex" gerade etwas schwer, zumindest das hue-Modul bietet diesen nicht .

gruss Thomas


Unknown argument hex, choose one of off on toggle statusRequest pct bri rgb color ct hue sat xy dimUp dimDown ctUp ctDown hueUp hueDown satUp satDown alert effect rename scene blink off-for-timer intervals on-till-overnight on-till off-till-overnight off-till on-for-timer attrTemplate
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: Beta-User am 13 November 2021, 16:59:52
set Philips_Hue_Go_1 hex {generate_random_hexcolor()}
dürfte auch "falsches set magic" sein. Würde mal folgendes versuchen:

set Philips_Hue_Go_1 hex {(generate_random_hexcolor())}

Ansonsten kann man zum einen den ganzen Code in Perl schreiben, dann sollte die Evaluierung "at runtime" erfolgen, und zum anderen kann man das sprintf doch auch gleich so schreiben, dass 6 Stellen rauskommen...
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 14 November 2021, 09:52:15
Zitat von: Der_Tom am 13 November 2021, 16:55:39
an was für eine Bridge ist denn die GO angelernt ?

zigbee2mqtt via Conbee2, template light rgbwrgb
Titel: Antw:"Zufälligen" hex Wert generieren
Beitrag von: harle am 14 November 2021, 09:52:59
set Philips_Hue_Go_1 hex {(generate_random_hexcolor())}

Danke, das passt. War auch doof, das ich es selbst nicht gemerkt habe.