Perl Variable Ausgeben oder in Device Dummy schreiben

Begonnen von MB_User, 12 März 2017, 22:11:57

Vorheriges Thema - Nächstes Thema

MB_User

Hallo Zusammen,

ich würde mir gerne den Inhalt einer Perl Variable in FHEM ausgeben, am liebsten in einem Dummy Device als Status.
Ich habe es per Perl Skript (leider ohne Erfolg) versucht:
Der Perl Code in 99_myUtils.pm sieht wie folgt aus:


sub dbtest($) {
my @Testing =( { fhem("get DB_Log - - 2017-03-01 2017-03-12 Messen_Bad:temperature") });
my ($device) = @_;

{fhem("set $device, $Testing[10]" )};
}


Ich nutze in FHEM einen HM-WDS40-TH-I-2 der seine Messwerte in eine MySQL DB schreibt via DbLog.
Als FHEM nutze ich 5.8 FeatureLevel: 5.8

Vielen Dank für Eure Hilfe!

KernSani

mal vorausgesetzt in $Testing[10] steht der richtige Wert (hast du das überprüft - z.B. indem du den GET Befehl in die Kommadozeile eingibst?)
brauchst du a) keine geschweifte Klammer (du bist ja schon im Perl) und b) kein ";" nach dem $device, also in etwa:


sub dbtest($) {
my @Testing =( { fhem("get DB_Log - - 2017-03-01 2017-03-12 Messen_Bad:temperature") });
my ($device) = @_;

fhem("set $device  $Testing[10]" );
}


RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

franky08

Und warum nimmst du nicht die Readings die der HM-WDS40-TH-I-2 bereitstellt und schreibst das benötigte Reading mit setreading oder set in ein dummy. Den Umweg über DbLog, warum?
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

KernSani

Zitat von: franky08 am 12 März 2017, 22:18:22
Und warum nimmst du nicht die Readings die der HM-WDS40-TH-I-2 bereitstellt und schreibst das benötigte Reading mit setreading oder set in ein dummy. Den Umweg über DbLog, warum?
Berechtigte Frage - ich hatte nur gelesen irgendwas loggt in ne MYSQL DB  :-[
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

MB_User

Hallo KernSani,
Hallo franky08,

@ KernSani,
Ja, ich habe das per Get-Befehl geprüft und es kommt der richtige Wert raus. Leider hat die Lösung nicht funktioniert. Es gibt keine Änderung des Status des Dummy Gerätes.

@ franky08
Ich habe vor komplexere Abfragen zu genieren um je nach Dataset bestimmte Geräte zu schalten.
Ein Beispiel: Ist die Temperatur seit drei Tagen über 28°C soll ein Rasensprenger eingeschaltet werden.
Dafür werde ich ein Außenthermometer verwenden, daher fange ich gerade klein im Bad an.

CoolTux

Zitat von: MB_User am 12 März 2017, 22:27:55
Hallo KernSani,
Hallo franky08,

@ KernSani,
Ja, ich habe das per Get-Befehl geprüft und es kommt der richtige Wert raus. Leider hat die Lösung nicht funktioniert. Es gibt keine Änderung des Status des Dummy Gerätes.

@ franky08
Ich habe vor komplexere Abfragen zu genieren um je nach Dataset bestimmte Geräte zu schalten.
Ein Beispiel: Ist die Temperatur seit drei Tagen über 28°C soll ein Rasensprenger eingeschaltet werden.
Dafür werde ich ein Außenthermometer verwenden, daher fange ich gerade klein im Bad an.

Dein Weg ist völlig falsch. Franky hat schon Recht. Sowas macht man direkt mit den Readings aus dem Device. Die logDb ist ausschließlich für History und Ploterstellung.
Du musst doch einfach nur innerhalb Deiner myUtils die Readings abfragen und hast dann Deinen Wert. Wenn Du kontrollieren willst ob die letzten 3 Tage über 28 Grad waren dann verwende das statistics Modul und lese hier die Readings für aus.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

KernSani

Zitat von: MB_User am 12 März 2017, 22:27:55
Ein Beispiel: Ist die Temperatur seit drei Tagen über 28°C soll ein Rasensprenger eingeschaltet werden.
Dafür werde ich ein Außenthermometer verwenden, daher fange ich gerade klein im Bad an.

Dafür würde es z.B. reichen, in ein userreading zu schreiben, wenn die Temperatur > 28° ist und dann den Timestamp des Readings abzufragen. (Mal abgesehen davon, dass es auch drei Tage lang durchgängig regnen kann und trotzdem 28° hat - Bodenfeuchtesensor wäre hier das Stichwort...)   
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...