Hauptmenü

setreading Fehlermeldung

Begonnen von Mad-at, 28 Februar 2023, 17:43:02

Vorheriges Thema - Nächstes Thema

Mad-at

Liebe alle!

Vielleicht is es eh keine Anfängerfrage, wenn nicht, bitte schubst mich in die richtige Richtung.
Ich habe einen Feinstaubsensor bei dem ich plötzliche Anstiege der Feinstaubkonzentration von der Baseline unterscheiden will. Da die Baseline sich aber durch Pollenflug und Saharastaub über das Jahr verschiebt, dachte ich eine 24h Median wäre als Baseline ausreichend robust. Das würde ich gerne mittel SQL Abfrage lösen. Der Part funktioniert soweit. Woran ich scheitere ist das eigentlich Triviale: wie bekomme ich den Wert aus meiner Subroutine raus? Ich wollte das mit einer Variabel und setreading lösen, aber FHEM schmeißt mir bei einem für mich erstmal korrekt wirkenden Code Fehlermeldungen.


define particulatematter_average DOIF (ReadingsAge("ParticulateMatter", "PM25.average", 0) > 86400) { \
    my $result = fhem("set ParticulateMatter PM25.average " . fhem("SELECT AVG(m.value) FROM (SELECT \@rownum:=\@rownum+1 as `row_number`, m.value FROM (SELECT \@rownum:=0) r, (SELECT value FROM history WHERE device = 'ParticulateMatter' AND reading = 'PM25' AND eventTime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 24 HOUR)) ORDER BY value) m) as `median_calc` WHERE `row_number` IN (FLOOR((\@rownum+1)/2), FLOOR((\@rownum+2)/2))"));;\
fhem("setreading ParticulateMatter PM25.average $result");;\
}


Fehlermeldung:

fhem("setreading ParticulateMatter PM25.average $result"); }: Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.


Weiß jemand Rat?

Danke, lg,

Matthias

Damian

Zitat von: Mad-at am 28 Februar 2023, 17:43:02
Liebe alle!

Vielleicht is es eh keine Anfängerfrage, wenn nicht, bitte schubst mich in die richtige Richtung.
Ich habe einen Feinstaubsensor bei dem ich plötzliche Anstiege der Feinstaubkonzentration von der Baseline unterscheiden will. Da die Baseline sich aber durch Pollenflug und Saharastaub über das Jahr verschiebt, dachte ich eine 24h Median wäre als Baseline ausreichend robust. Das würde ich gerne mittel SQL Abfrage lösen. Der Part funktioniert soweit. Woran ich scheitere ist das eigentlich Triviale: wie bekomme ich den Wert aus meiner Subroutine raus? Ich wollte das mit einer Variabel und setreading lösen, aber FHEM schmeißt mir bei einem für mich erstmal korrekt wirkenden Code Fehlermeldungen.


define particulatematter_average DOIF (ReadingsAge("ParticulateMatter", "PM25.average", 0) > 86400) { \
    my $result = fhem("set ParticulateMatter PM25.average " . fhem("SELECT AVG(m.value) FROM (SELECT \@rownum:=\@rownum+1 as `row_number`, m.value FROM (SELECT \@rownum:=0) r, (SELECT value FROM history WHERE device = 'ParticulateMatter' AND reading = 'PM25' AND eventTime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 24 HOUR)) ORDER BY value) m) as `median_calc` WHERE `row_number` IN (FLOOR((\@rownum+1)/2), FLOOR((\@rownum+2)/2))"));;\
fhem("setreading ParticulateMatter PM25.average $result");;\
}


Fehlermeldung:

fhem("setreading ParticulateMatter PM25.average $result"); }: Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.


Weiß jemand Rat?

Danke, lg,

Matthias

logge $result, dann wirst du vielleicht das Problem sehen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Mad-at

Danke! Hmmm er sagt dass $result nicht initialisiert ist... aber es ist doch initialisiert?  ???

Damian

Es hängt davon ab,  was dein fhem-Befehl zurückliefert, undef ist z. B. nicht initialisiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF