Hallo,
in einem dummy wird über ein notify ein Reading erzeugt. Dieses Readin beinhaltet 4 "Einträge", 2 dieser "Einträge" würde ich gerne als gesonderte Readings haben wollen. Ich weiss das man das über userReadings hinbekommen kann aber absolut keine Ahnung wie.
statuses
Vacuum Status: STATE_DOCKED
Battery: 100%
Fan Speed: max
Water Level: ultrahigh
Hat jemand eine Idee
VG Thomas
Zitat von: Thomas0401 am 24 Januar 2021, 14:09:46
in einem dummy wird über ein notify ein Reading erzeugt. Dieses Readin beinhaltet 4 "Einträge", 2 dieser "Einträge" würde ich gerne als gesonderte Readings haben wollen.
Wieso können die gewünschten readings nicht direkt im notify erzeugt werden?
Wie sieht denn das notify aus?
Das Gerät ist ein Saugroboter und funktioniert über eine Cloudlösung. Bei der Abfrage "statuses" gibt der Bot diese 4 Werte komplett an
{my $botcmd = (split ' ',ReadingsVal("DeebotOzmo950","state",0))[1];;my $result = qx "sudo deebotozmo $botcmd &";; fhem("setreading DeebotOzmo950 $botcmd $result");;}
Ersetze mal den letzten Teil Deines Codes (fhem(setreading...) durch
foreach my $line (split("\n",$result)){
next unless $line;
my ($r,$v) = split(":",$line);
$r =~s/\ /_/g;
fhem("setreading DeebotOzmo950 $r $v");
}
Schöner wäre es allerdings, den kompletten Ausführungsteil in Deinem notify in die 99_myUtils.pm auszulagern.
EDIT: korrekten deviceName in den Code eingefügt
--
Ich habe völlig falsch beschrieben.
Dieses notify erzeugt auf dem Pi einen "List-Befehl" und eine Auswahl auf dem dummy z.B.
set DeebotOzmo950 05_Systeminfos statuses
und das kommt dann von dem Pi bzw. an den dummy
pi@PI-FHEM:~ $ sudo deebotozmo statuses
Vacuum Status: STATE_DOCKED
Battery: 100%
Fan Speed: max
Water Level: ultrahigh
pi@PI-FHEM:~ $
Ich habe schon verstanden was Du möchtest.
Und mein Codeschnipsel oben, macht aus der Rückgabe 4 readings in Deinem device.
Ok dann habe ich es nicht begriffen wo ich diesen Schnipsel genau einfügen bw. was ich im Code ersetzen soll ;)
Der Code gehört in Dein notify.
Hier die raw definition. Die erste Zeile musst Du natürlich mit den Werten aus Deinem bestehenden notify anpassen,
Du hast ja immer noch nicht Dein vollständiges notify gepostet.
defmod testNotify notify BLA:BLUB {\
my $botcmd = (split ' ',ReadingsVal("DeebotOzmo950","state",0))[1];;\
my $result = qx "sudo deebotozmo $botcmd &";;\
foreach my $line (split("\n",$result)){\
next unless $line;;\
my ($r,$v) = split(":",$line);;\
$r =~s/\ /_/g;;\
fhem("setreading DeebotOzmo950 $r $v");;\
}\
}
so ist das original
defmod DeebotOzmo950_Cmd05 notify DeebotOzmo950:05_Systeminfos.* {my $botcmd = (split ' ',ReadingsVal("DeebotOzmo950","state",0))[1];;;;my $result = qx "sudo deebotozmo $botcmd &";;;; fhem("setreading DeebotOzmo950 $botcmd $result");;;;}
Zitat von: betateilchen am 24 Januar 2021, 17:07:18
Die erste Zeile musst Du natürlich mit den Werten aus Deinem bestehenden notify anpassen,
Was ist denn daran so schwer?
defmod DeebotOzmo950_Cmd05 notify DeebotOzmo950:05_Systeminfos.* {\
my $botcmd = (split ' ',ReadingsVal("DeebotOzmo950","state",0))[1];;\
my $result = qx "sudo deebotozmo $botcmd &";;\
foreach my $line (split("\n",$result)){\
next unless $line;;\
my ($r,$v) = split(":",$line);;\
$r =~s/\ /_/g;;\
fhem("setreading DeebotOzmo950 $r $v");;\
}\
}
Probier doch einfach mal aus, was man Dir vorschlägt.
--
Hast ja recht, Westfalen sind manchmal etwas Stur ;D
Hat aber geklappt und funktioniert. Ist immer schwierig am Anfang für Anfänger. Gibt es was was Du empfehlen kannst wo man Perl usw. vernünftig erlenen kann?
Zitat von: Thomas0401 am 24 Januar 2021, 17:34:53
Gibt es was was Du empfehlen kannst wo man Perl usw. vernünftig erlenen kann?
Naja, perl Tutorials gibt es jede Menge im Internet. Welches einem am besten weiterhilft, ist persönliche Geschmackssache.
Lass mich raten, Du möchtest verstehen, was mein Codeschnipsel macht und warum es funktioniert? Guter Plan... 8)
foreach my $line (split("\n",$result)){\ # der Rückgabewert wird zeilenweise verarbeitet
next unless $line;;\ # Leerzeilen werden übersprungen
my ($r,$v) = split(":",$line);;\ # der Zeileninhalt wird am Doppelpunkt in readingName und readingValue geteilt
$r =~s/\ /_/g;;\ # im readingName werden Leerzeichen durch Unterstriche ersetzt, sonst funktioniert es nicht
fhem("setreading DeebotOzmo950 $r $v");;\ # das reading wird gesetzt
}\
--
Ja genau, immer abschreiben oder kopieren bringt auf Dauer keinen Spaß.
Der Wert des Readings "Battery" wird in % angezeigt, gibt es die Möglichkeit das auch zu löschen bzw. nicht anzeigen zu lassen?
Klar, könnte man das auch entfernen, aber wieso stört denn die Angabe der zugehörigen Einheit beim Reading?
--
Ja es stört im FTUI,
$v =~s/%$// if $r eq 'Battery';
und wo das hingehört, findest Du sicher selbst raus :)
--
Nicht so ganz
na gut, doch gefunden
Vielen Dank für deine tolle Hilfe
VG Thomas