Variable ($mday) in Code einfügen

Begonnen von jailbreaker07, 09 August 2017, 09:46:41

Vorheriges Thema - Nächstes Thema

jailbreaker07

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

amenomade

Wo machst Du das? Ein bisschen mehr Code und die Fehlermeldung wären hilfreich.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jailbreaker07

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

rabehd

+*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?
Auch funktionierende Lösungen kann man hinterfragen.

DeeSPe

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
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

jailbreaker07

Hallo Danke,

Jedoch bekomme ich als Fehler:

syntax error at (eval 137879) line 1, near "1."-30,23:59:40,""

Danke Gruß

Thorsten

DeeSPe

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
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

jailbreaker07

Hey Dan,

das funktioniert leider nicht..... in der Datenbank kommt nichts an :-(

Gruß

Thorsten

amenomade

Was ist die Fehlermeldung?

Und kannst Du ein "list logdb_strom_jct" posten?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jailbreaker07

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

amenomade

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)) }
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jailbreaker07

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

jailbreaker07

Das habe ich gefunden:

"printf("%2.2d",$zahl);   # gibt $zahl mindestens 2-stellig auf STDOUT aus"

Nur wie baue ich das ein....?

Gruß

Thorsten

DeeSPe

my $m = $month;
$m = "0".$m if (length $m == 1);


Gruß
Dan
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

jailbreaker07

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