[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

Begonnen von stefanru, 22 März 2019, 21:16:26

Vorheriges Thema - Nächstes Thema

TomLee

#180
Natürlich hab ich nicht ins Log geschaut gehabt, auch wenn die Readings angelegt wurden gibts diese Meldung im Log:

2021.12.20 18:31:32 1: PERL WARNING: "my" variable $hash masks earlier declaration in same scope at (eval 46622) line 1.
2021.12.20 18:31:32 3: eval: my $CID=   $evalSpecials->{'%CID'};my $DEVICETOPIC=   $evalSpecials->{'%DEVICETOPIC'};my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $JSONMAP=   $evalSpecials->{'%JSONMAP'};my $NAME=   $evalSpecials->{'%NAME'};my $TOPIC=   $evalSpecials->{'%TOPIC'};{HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_;;my $hash = $defs{$NAME};; json2reading($hash, $data, "", $hash->{JSONMAP},undef,"ver|col");;}})}

TomLee

So klappts auch ohne Meldung:

wled/538e36/c:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_; json2reading($defs{$NAME}, $data, "", $hash->{JSONMAP},undef,"ver|col");}})}

rudolfkoenig

Es wuerde mich wundern, wenn $hash->{JSONMAP} das Richtige referenziert.

Mein Vorschlag:
wled/538e36/c:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub(){json2reading($defs{$NAME},$_[2],"",$defs{$NAME}{JSONMAP},undef,"ver|col");}})}

Wobei wenn $NAME funktioniert, dann sollte auch $JSONMAP direkt funktionieren.
(Sorry fuer den Hickhack, aber ein Testsystem aufzusetzen ist mir zu aufwendig).

TomLee

Keine Meldung im Log, die Readings werden geschrieben, jsonMap funktioniert auch.

Beta-User

Zitat von: DeeSPe am 20 Dezember 2021, 15:42:48
@Beta-User: Sofern von Dir für gut erachtet könnte diese Version dann Einzug ins SVN halten.
...ist drin. Habe nur noch sehr kleine Kleinigkeiten angepaßt :) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

DeeSPe

MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

Während ich mich vorhin mit etwas ganz anderem beschäftigt habe ist mir aufgefallen dass das ermitteln der IP viel simpler zu bewerkstelligen sein könnte.

my $ip = InternalVal($dev,$io.'_CONN',ReadingsVal($dev,'ip', undef)) =~ m/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/x ? $1 : return defined $event ? $c : undef;


=>

my $ip = InternalVal(InternalVal($dev,$io.'_CONN','none'),'PEER','none') // return defined $event ? $c : undef;

einfach nur auslesen, wäre doch auch eine Variante oder nicht ?  ;D 8) :P


Den Ersatzwert mit ReadingsVal($dev,'ip', undef) versteh ich nicht, das Reading gibts doch nicht und wird auch nicht irgendwo geschrieben.

Beta-User

Die Regex sichert ab, dass was "sinnvolles" da steht, und das Reading gibt es zwar nicht, aber man kann es mit "setreading" setzen.

(Falls sich jemand fragt, wofür man das "braucht": es steht bereits hier im Thread ;) )
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

ZitatDie Regex sichert ab, dass was "sinnvolles" da steht,

Du meinst wenn die MQTT2_Server-Verbindung nicht aktiv/definiert ist ? ja dann hinkt der Vorschlag.

Zitatund das Reading gibt es zwar nicht, aber man kann es mit "setreading" setzen.

Ja ist es vergessen worden zu schreiben ? So steht einfach nur die Abfrage eines Readings im Ersatzwert das es gar nicht gibt ?

Beta-User

Zitat von: TomLee am 21 Dezember 2021, 17:04:09
Ja ist es vergessen worden zu schreiben ? So steht einfach nur die Abfrage eines Readings im Ersatzwert das es gar nicht gibt ?
Vorschläge zur Verbesserung der Doku (= attrTemplate-Text, in diesem Fall) nehme ich gerne entgegen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

ZitatVorschläge zur Verbesserung der Doku (= attrTemplate-Text, in diesem Fall) nehme ich gerne entgegen...

Das Reading ip im Device reicht mMn. völlig aus so wie man das aus anderen Devices auch gewohnt ist, ich verstehe nicht was es da zu dokumentieren gibt / wo wir aneinander vorbeireden.

Beta-User

a) Na ja, du schreibst zurecht: in der Regel gibt es das Reading nicht.

b) Nutzt man MQTT2_SERVER braucht man es nicht, weil die IP-Adresse aus den vorhandenen Daten abgeleitet werden kann.

c) Man braucht es nur in einem Fall, aber dann muss man es händisch setzen.

So jedenfalls mein Verständnis.

Der Fall c) ist nicht dokumentiert, oder?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

Zitatc) Man braucht es nur in einem Fall, aber dann muss man es händisch setzen.

So jedenfalls mein Verständnis.

Der Fall c) ist nicht dokumentiert, oder?

Ich hab jetzt nochmal alle Beiträge überflogen in diesem Faden in denen ip vorkommt, ich steh weiterhin auf dem Schlauch was diesen einen geheimnisvollen  ;D Fall angeht, sry ich verstehs nicht.

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

ComputerZOO

#194
Zitat von: TomLee am 20 Dezember 2021, 18:06:44
@ComputerZoo

Du wolltest das haben, mit dem Attribut jsonMap kann man die Readingnamen anpassen, mach mal Vorschläge.

:o :o :o
Wir kommen der Sache schon näher...
tele/$DEVICETOPIC/c:.* { { "color"=>substr("$EVENT", 1, 6)} }
erstellt mir ja das Reading für die (primäre) Farbe.
Jetzt wäre es natürlich schön, wenn es ähnlich dazu eine color2nd und color3rd geben würde die direkt den umgerechneten HEX-Wert beinhalten.
(Ich habe dazu hier im Forum mal diesen Code adaptiert:###############################################################################################
#
# wandelt Dezimale Werte in Hexadezimale Farbwerte um.
# dec2hex("0-255 0-255 0-255");
# z.B. "255, 0, 255" oder "255 0 255" ergibt als Rückgabewert ff00ff
#
sub dec2hex($;$) {
my ($color, $format) = @_;
my $dividerChar = " ";
$dividerChar = "," if ($color =~ /\,/);
$format = "lc" if (!$format);
my ($redValue, $greenValue, $blueValue) = split($dividerChar, $color);
customLog("./log/dec2hex.log", 3, "color: ".$color." red: ".$redValue." green: ".$greenValue." blue: ".$blueValue);
$redValue = sprintf("%02x", $redValue);
$greenValue = sprintf("%02x", $greenValue);
$blueValue = sprintf("%02x", $blueValue);
return "$redValue$greenValue$blueValue" if ($format eq "lc");
return uc($redValue).uc($greenValue).uc($blueValue) if ($format eq "uc");
}
und in der 99_myUtils.pm für verschiedene Dinge eingebunden).

Alternativ wäre es natürlich schön, wenn Aircoookie diese Werte direkt als MQTT-Topic zurückgeben würde...

EDIT: Sehe gerade das es sich bei der (übergebenen, primären) Farbe ja um ein eigenes Topic handelt...