Hallo,
im unten stehenden Code möchte ich den aktuellen Monat und das Jahr gerne automatisch einfügen... Mein Versuch hat leide einen Fehler...
fhem(("set logdb_strom_jct insert 2017-08-30,23:59:40.......
Mein Versuch:
fhem(("set logdb_strom_jct insert $year-$month-30,23:59:40....
Vielen Dank für die Hilfe.
Gruß
Thorsten
Wo machst Du das? Ein bisschen mehr Code und die Fehlermeldung wären hilfreich.
Das ist der komplette Code....
Ich habe für den Stromverbrauch ein Jahresübersichts Plott...den aktuellen Monatsververbrauch wollte ich mit in den Plott haben.Da ich den Wert aufgrund der Darstellung Von Datum her in die Zukunft schreibe, wollt euch das das Jahr und der Monat automatisch geändert wird, nur der Tag und die Uhrzeit bleibt immer gleich. Der Vormonatsverbrauch wird immer zum Monatsende in die Datenbank geschrieben.Gibt sicherlich noch andere Wege... Aber so habe ich das hin bekommen.....
+*01:00:00 { fhem(("set logdb_strom_jct insert 2017-08-30,23:59:40,".((ReadingsVal("Stromzaehler_JCT","kWh",0) - ReadingsVal("Zaehlerstand_vormonat_JCT","state",0))))) }
Gruß
Thorsten
Gruß
Thorsten
+*01:00:00 { fhem(("set logdb_strom_jct insert " . $year . "-" . $month . "-30,23:59:40,".((ReadingsVal("Stromzaehler_JCT","kWh",0) - ReadingsVal("Zaehlerstand_vormonat_JCT","state",0))))) }
Wäre so eine undurchdachte Idee von mir.
Sind $year $month überhaupt global definiert?
Zitat von: jailbreaker07 am 09 August 2017, 12:50:26
Das ist der komplette Code....
Ich habe für den Stromverbrauch ein Jahresübersichts Plott...den aktuellen Monatsververbrauch wollte ich mit in den Plott haben.Da ich den Wert aufgrund der Darstellung Von Datum her in die Zukunft schreibe, wollt euch das das Jahr und der Monat automatisch geändert wird, nur der Tag und die Uhrzeit bleibt immer gleich. Der Vormonatsverbrauch wird immer zum Monatsende in die Datenbank geschrieben.Gibt sicherlich noch andere Wege... Aber so habe ich das hin bekommen.....
+*01:00:00 { fhem(("set logdb_strom_jct insert 2017-08-30,23:59:40,".((ReadingsVal("Stromzaehler_JCT","kWh",0) - ReadingsVal("Zaehlerstand_vormonat_JCT","state",0))))) }
Gruß
Thorsten
Gruß
Thorsten
Zitat<Perl-Zeitvariablen>
Variablen für Zeit- und Datumsangaben, $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst, $week, $hms, $hm, $md, $ymd
Die vielen Klammern sind völlig überflüssig.
+*01:00:00 { fhem "set logdb_strom_jct insert ".$year."-".$month+1."-30,23:59:40,".ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0) }
Gruß
Dan
Hallo Danke,
Jedoch bekomme ich als Fehler:
syntax error at (eval 137879) line 1, near "1."-30,23:59:40,""
Danke Gruß
Thorsten
Zitat von: jailbreaker07 am 09 August 2017, 15:02:21
Hallo Danke,
Jedoch bekomme ich als Fehler:
syntax error at (eval 137879) line 1, near "1."-30,23:59:40,""
Danke Gruß
Thorsten
Sorry, $month ist ja schon der richtige Monat.
Dann kann ja die "+1" weggelassen werden:
+*01:00:00 { fhem "set logdb_strom_jct insert ".$year."-".$month."-30,23:59:40,".ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0) }
Gruß
Dan
Hey Dan,
das funktioniert leider nicht..... in der Datenbank kommt nichts an :-(
Gruß
Thorsten
Was ist die Fehlermeldung?
Und kannst Du ein "list logdb_strom_jct" posten?
Der Fehler laut log Datei lautet:
2017.08.09 17:12:27 3: Stromverbrauch_monat_year_JCT_at: Unknown command -46129.8, try help.
Unter List steht nur der Eintrag mit dem alten Code.
Internals:
CFGFN
DATABASE /opt/fhem/fhem.db
DEF logdb
LASTCMD insert
NAME logdb_strom_jct
NOTIFYDEV global,logdb_strom_jct
NR 4749
NTFY_ORDER 50-logdb_strom_jct
ROLE Client
STATE done
TYPE DbRep
VERSION 4.16.1
Helper:
DBLOGDEVICE logdb
Cv:
aggregation no
aggsec 1
destr 2017-08-09
dsstr 1970-01-01
epoch_seconds_end 1502290312
mestr 08
msstr 01
testr 16:51:52
tsstr 01:00:00
wdadd 345600
yestr 2017
ysstr 1970
Readings:
2017-08-09 16:51:52 data_inserted 2017-08-30 23:59:40, Stromverbrauch_vormonat_JCT, manual, manual, state, 126.699999999997,
2017-08-09 16:51:52 number_lines_inserted 1
2017-08-09 16:51:52 state done
Dbloghash:
COLUMNS field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
CONFIGURATION ./db.conf
DBMODEL SQLITE
DEF ./db.conf .*:.*
MODE synchronous
NAME logdb
NR 188
NTFY_ORDER 50-logdb
PID 31428
REGEXP .*:.*
STATE connected
TYPE DbLog
VERSION 2.16.10
dbconn SQLite:dbname=/opt/fhem/fhem.db
dbuser
.userReadings:
HASH(0x2541890)
Helper:
COLSET 1
DEVICECOL 64
EVENTCOL 512
READINGCOL 64
TYPECOL 64
UNITCOL 32
VALUECOL 128
Readings:
2017-08-09 17:07:03 state connected
Cache:
index 0
Attributes:
device Stromverbrauch_vormonat_JCT
reading state
room JCT
Im CommandRef steht:
Zitat# Es sind KEINE Leerzeichen im Feldwert erlaubt !
Deswegen würde ich zuerst die Differenz kalkulieren (my $differenz = ReadingsNum() - ReadingsNum();; ) und erst dann fhem set insert rufen.
Ich hab das Gefühl, dass er im Moment es so interpretiert:
Zitatset logdb_strom_jct insert ".$year."-".$month."-30,23:59:40,".ReadingsNum("Stromzaehler_JCT","kWh",0)
und dann versteht nicht, was "- ReadingsNum("Zaehlerstand_vormonat_JCT","state",0)" soll. Deswegen: "Unknown command -46129.8".
Kann es sein, dass 46129.8 = Stromzaehler_vormonat_JCT:state ?
Dann vielleicht würde es auch mit doch zusätzlichen Klammern bei der Kalkulation gehen:
+*01:00:00 { fhem "set logdb_strom_jct insert ".$year."-".$month."-30,23:59:40,".(ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0)) }
Hey,
Jetzt meckert er das dass Datumsformat falsch ist.... das lautet nämlich 2017-8.
Wenn ich manuell die 0 einsetze dann geht das...... Wie bekommt man jetzt das Jahr zweistellig hin?
Danke :-)
Gruß
Thorsten
Das habe ich gefunden:
"printf("%2.2d",$zahl); # gibt $zahl mindestens 2-stellig auf STDOUT aus"
Nur wie baue ich das ein....?
Gruß
Thorsten
my $m = $month;
$m = "0".$m if (length $m == 1);
Gruß
Dan
Hey Dan,
Wie baue ich das in den unten stehenden Code ein?
Ich merke... ich muss noch viel lernen...
+*01:00:00 { fhem "set logdb_strom_jct insert ".$year."-".$month."-30,23:59:40,".(ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0)) }
my $m = $month;
Danke für die Hilfe!
Gruß
Thorsten
Zitat von: jailbreaker07 am 09 August 2017, 18:43:55
Hey Dan,
Wie baue ich das in den unten stehenden Code ein?
Ich merke... ich muss noch viel lernen...
+*01:00:00 { fhem "set logdb_strom_jct insert ".$year."-".$month."-30,23:59:40,".(ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0)) }
my $m = $month;
Danke für die Hilfe!
Gruß
Thorsten
Das ist doch nun ganz einfach:
+*01:00:00 { my $m = $month; $m = "0".$m if (length $m == 1); fhem "set logdb_strom_jct insert ".$year."-".$m."-30,23:59:40,".(ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0)) }
Gruß
Dan
Oder
+*01:00:00 { fhem "set logdb_strom_jct insert ".$year."-".sprintf("%02d",$month)."-30,23:59:40,".(ReadingsNum("Stromzaehler_JCT","kWh",0) - ReadingsNum("Zaehlerstand_vormonat_JCT","state",0)) }