FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jnewton957 am 25 Februar 2017, 07:02:52

Titel: if Klammersetzung bei dummy und fhem(set...
Beitrag von: jnewton957 am 25 Februar 2017, 07:02:52
Hallo,

ich möchte in meiner Stromstatistik aktuelle Werte mit Vorjahreswerten vergleichen.

Dazu habe ich mir jeweils den Monatswert in ein dummy geschrieben: EM_month_1601 - EM_month_1612

Nun möchte ich jeweils ein dummy  EM_vorjahresmonat setzen lassen.

define ermittlung_EM_vorjahresmonat1 at *23:59:30  {if($year==2017 && $month==1 && $mday==1) {\
  fhem("set EM_vorjahresmonat ". EM_month_1601);;\
} }


Ich bekomme aber
ERROR evaluating {if($year==2017 && $month==1 && $mday==1) {
  fhem("set EM_vorjahresmonat ". EM_month_1601);
} }: Bareword "EM_month_1601" not allowed while "strict subs" in use at (eval 7404363) line 2.

2017.02.24 23:59:36 3: ermittlung_EM_vorjahresmonat1: Bareword "EM_month_1601" not allowed while "strict subs" in use at (eval 7404363) line 2.


Also ist irgendwo die Klammersetzung falsch?

Kann mir da jemend bitte beim define die richtige Klammer setzen.

Danke
Jörg
Titel: Antw:if Klammersetzung bei dummy und fhem(set...
Beitrag von: Ellert am 25 Februar 2017, 07:13:21
Wenn Du es mit zusätzlichen Klammern lösen möchtest, versuche es mit set magic.

fhem("set EM_vorjahresmonat [EM_month_1601:state]")

eventuell müsstest Du die Klammern maskieren

fhem("set EM_vorjahresmonat \[EM_month_1601:state\]")

siehe https://fhem.de/commandref_DE.html#set
Titel: Antw:if Klammersetzung bei dummy und fhem(set...
Beitrag von: CoolTux am 25 Februar 2017, 08:06:15

  fhem("set EM_vorjahresmonat ". EM_month_1601)


EM_month_1601 ist Dein Bareword. Was soll das eigentlich sein? Wenn du hier eine Variable nehmen wolltest musst du sie entsprechend deklarieren und auch als Variable kennzeichnen.


  fhem("set EM_vorjahresmonat ". Value("EM_month_1601");


Könnte eine Lösung sein.
Titel: Antw:if Klammersetzung bei dummy und fhem(set...
Beitrag von: Thorsten Pferdekaemper am 25 Februar 2017, 08:21:44
Zitat von: CoolTux am 25 Februar 2017, 08:06:15

  fhem("set EM_vorjahresmonat ". EM_month_1601)


EM_month_1601 ist Dein Bareword. Was soll das eigentlich sein?
Hat er doch gesagt. Es ist ein Dummy. Der erste Vorschlag von Ellert ist meiner Meinung nach schon richtig.
Gruß,
   Thorsten
Titel: Antw:if Klammersetzung bei dummy und fhem(set...
Beitrag von: jnewton957 am 25 Februar 2017, 08:23:30
Zitat von: CoolTux am 25 Februar 2017, 08:06:15

EM_month_1601 ist Dein Bareword. Was soll das eigentlich sein?

EM_month_1601 ist der Monatverbrauch (Strom) aus Januar 2016.
Internals:
   CFGFN      /opt/fhem/FHEM/16_Stromstatistik.cfg
   NAME       EM_month_1601
   NR         1369
   STATE      332
   TYPE       dummy
   Readings:
     2017-01-15 07:35:02   state           332


Genau den möchte ich nun mit Januar2017 (EM_month_1701) gegenüberstellen. Die meisten Auswertungen beziehen sich immer auf den Vormoat - das ist baer z.B. im März blöd wenn der Stromverbauch zum Vormonat aufgrund Witterung oder Urlaub oder anderer Umstädne abweischt. Interessanter finde ich es zusätzlich eben den VorJAHRESwert zu vergleichen.

Hilft das ?

Jörg

Titel: Antw:if Klammersetzung bei dummy und fhem(set...
Beitrag von: Thorsten Pferdekaemper am 25 Februar 2017, 08:33:01
Zitat von: jnewton957 am 25 Februar 2017, 08:23:30Hilft das ?
Lies doch mal alle Beiträge.
Gruß,
   Thorsten
Titel: Antw:if Klammersetzung bei dummy und fhem(set...
Beitrag von: CoolTux am 25 Februar 2017, 08:35:09
Zitat von: Thorsten Pferdekaemper am 25 Februar 2017, 08:21:44
Hat er doch gesagt. Es ist ein Dummy. Der erste Vorschlag von Ellert ist meiner Meinung nach schon richtig.
Gruß,
   Thorsten

Mir ging es eher darum das es entweder eine Variable oder der Aufruf einer Funktion sein kann, da es in der Perlumgebung stand. Beides passte aber nicht zu dem was da stand.