Seltsame Meldung für $DEVICE

Begonnen von roemi, 29 April 2021, 15:09:52

Vorheriges Thema - Nächstes Thema

roemi

Hallo,

ich habe folgenden Code als Zeile 5:
Log 1, "Startevent ".$EVENT . " " . "$DEVICE";

und bekomme diese Meldung:
Zitatcondition c01: Bareword "batteryPercent" not allowed while "strict subs" in use at (eval 790958) line 5.
syntax error at (eval 790958) line 5, near "batteryPercent:"

wobei korrekt ins Log geschrieben wird:
Zitat2021.04.29 15:04:32 1: Startevent 4002 mySwitch22

Nehme ich $DEVICE weg, kommt keine Meldung.

Ein ratloser Römi sagt schon mal Danke
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

roemi

Jetzt lautet die Meldung:
Zitatcondition c01: Bareword "reachable" not allowed while "strict subs" in use at (eval 792127) line 5.
syntax error at (eval 792127) line 5, near "reachable:"

???

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

Christoph Morrison

Weil sich der Inhalt von $EVENT geändert hat.

Probiere mal folgendes:


Log(1, "Startevent $EVENT $DEVICE");

roemi

Hallo Christoph Morrison,

das war es und die Lösung konnte ich gleich auch an anderer Stelle nutzen.

Danke

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

Christoph Morrison


roemi

HeHo,

jetzt habe ich im Log folgenden Eintrag
Zitat2021.04.29 23:25:21 1: Startevent reachable: 1,battery: 47,batteryPercent: 47 mySwitch22
Das ist nicht dramatisch weil alles funzt ... aber verstehen wäre schon "nett".

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

roemi

Hallo,

auch das oben aufgeführt habe ich nun im Griff  ;D
Aber natürlich, wo Licht ist, ist auch viiiiiel Schatten.

Log(1, "Startevent $EVENT $DEVICE");
funktioniert
ZitatLog(1, "Startevent [v_variable]");
oder
ZitatLog(1, "Startevent " [v_variable]);
führen zum Fehler.

Dazu habe ich nichts gefunden und kann nur hier nachfragen.

Danke

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

Otto123

Weil das DOIF Syntax ist - wo genau das funktionieren kann - keine Ahnung. ::)

Perl "richtig" wäre so:
Log(1, "Startevent ".Value('v_variable'));

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

roemi

Hallo Otto,

Danke das klappt.
Ich tue mich echt noch schwer mit insbesondere Variable, Device  ::) ok .. mit allem  ;D

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

Otto123

Na dann kurzer Kurs fürs Bier:
"Das ist ein String" und 'das auch' eine $Variable beginnt mit $ die "$Variable wird hier drin aufgelöst" aber ' hier drin nicht, da bleibt das Wort $Variable stehen'.
Durch Verkettung mit dem Punkt kann man zwei Strings verbinden "Wort 1".' Wort 2' oder auch den (String)Rückgabewert einer Funktion "Wort 1 mit $Variable".ReadingsVal('device',reading','defaultwert')

Übrigens habe ich gerade einen Kasten Landsberger mit 6 versch. Sorten geholt ;) 5 davon hattest Du noch nicht ;)

Schönen 1. Mai
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Christoph Morrison

Guck dir mal das folgende DOIF an, das ich zur Demonstration angelegt habe:


defmod general.test.doif.vars DOIF (\
    1 ne 1 ## ich triggere nie von alleine\
)\
(\
    msg FHEM-Modus: Modus ist [$SELF:mode],\
    msg {( q(Perl-Modus: Modus ist [$SELF:mode]) )}\
    {( Log 1, q([$SELF:mode]) )}\
)
attr general.test.doif.vars comment 2021.05.01 11:19:20.274 1 : enabled


Schickt mir wie zu erwarten folgendes per msg:

FHEM-Modus: Modus ist enabled
Perl-Modus: Modus ist enabled


Und loggt folgenden Wert:
2021.05.01 11:19:20.274 1 : enabled

DOIF ist ein bisschen tricky, weil DOIF im Prinzip wie ein Präprozessor funktioniert und der Perl-Interpreter dann bereits ersetzte Werte sieht.
Aus
msg {( q(Perl-Modus: Modus ist [$SELF:mode]) )}

wird für Perl (vereinfacht und pseudo code):

Send_Message(q(Perl-Modus: Modus ist enabled));

q fungiert hier wie '' (single quotes) und qq wie "" (double quotes). Man kann nur leichter aus q → qq →  q machen als jeweils die Quotes zu suchen und zu entfernen, außerdem kann man dann die Quotes auch innerhalb der q()-Blocks benutzen.

Das bei dir
Log(1, "Startevent [v_variable]");
nicht funktioniert ist a) keine gute Fehlerbeschreibung und b) ungewöhnlich. Du hast uns bisher auch das list deines DOIF vorenthalten.

roemi

Hallo,

Otto:
ZitatÜbrigens habe ich gerade einen Kasten Landsberger mit 6 versch. Sorten geholt ;) 5 davon hattest Du noch nicht
Ja, aber auch diese werden irgendwann fällig werden.

Christoph:
ZitatDu hast uns bisher auch das list deines DOIF vorenthalten.
Mmmmh. Ja. Fand ich nicht interessant genug und zudem bastel ich jede neue Erkenntnis ein und so hat sich der Anfangs "dreckige" Code schon etwas verfeinert.

Hier ist er, etwas (viele) OldSchool ... aber so kann ich mich langsam ran tasten und habe trotzdem schon eine funktionierende Schaltung
{
if ([?00:01-08:00] and [Anwesenheit] eq "present")
  {
  if ([v_kellertreppe] ne "nacht")
   {
   fhem_set("deConz_HUEDevice3 pct 0"),
   fhem_set("v_kellertreppe nacht"),
   fhem_set("v_keller_sleep nein"),
   Log(1, "KT Auf Nacht geschaltet")
   }
  }
elsif ([?08:01-00:00] and [Anwesenheit] eq "present")
  {
   if (get_Exec("off2") ne 0)
    {
    del_Exec("off2") ; fhem_set("v_keller_aus nein");
    }
  if ([v_kellertreppe] ne "tag") {fhem_set("v_kellertreppe tag") , Log(1, "KT Auf Tag geschaltet")};
  if ([deConz_HUEDevice3] eq "off") {fhem_set("deConz_HUEDevice3 pct 25") , Log(1, "KT Tag Licht an")};
  }
elsif ([Anwesenheit] ne "present")
  {
  if ([v_kellertreppe] ne "aus") {fhem_set("v_kellertreppe aus") , Log(1, "KT Keiner zuhause")};
  }
}
#-Aus-----------------------------------------------------------------------------
{
if ([?v_keller_aus] ne "ja" and [?v_kellertreppe] eq "aus" and [deConz_HUEDevice3] ne "off")
{fhem_set("v_keller_aus ja");
set_Exec("off2",600,'fhem_set("deConz_HUEDevice3 pct 0"),fhem_set("v_keller_aus nein") , Log(1, "KT Keiner zuhause und Licht aus")');}
}
#-Nacht-----------------------------------------------------------------------------
{
if ([?v_keller_sleep] ne "ja" and [?v_kellertreppe] eq "nacht" and [mySensor11] eq "motion")
{fhem_set("deConz_HUEDevice3 pct 25") if ([?deConz_HUEDevice3] ne "on");
fhem_set("v_keller_sleep ja");
set_Exec("off",180,'fhem_set("deConz_HUEDevice3 pct 0"),fhem_set("v_keller_sleep nein") , Log(1, "KT Nacht Licht aus")');}
}
#-Tag-----------------------------------------------------------------------------
{
if ([?v_kellertreppe] eq "tag")
{
  if ([myLightLevelSensor23:lux:d] > 12000)
    {fhem_set("v_keller_newpct 10")}
   elsif ([myLightLevelSensor23:lux:d] > 10500)
    {fhem_set("v_keller_newpct 15")}
   elsif ([myLightLevelSensor23:lux:d] > 9000)
    {fhem_set("v_keller_newpct 20")}
   elsif ([myLightLevelSensor23:lux:d] > 7500)
    {fhem_set("v_keller_newpct 30")}
   else
    {fhem_set("v_keller_newpct 40")}
   if ([v_keller_pct] ne [v_keller_newpct])
    {
    fhem_set("deConz_HUEDevice3 pct ".[v_keller_newpct]),
    fhem_set("v_keller_pct ".[v_keller_newpct]),
    Log(1, "KT Licht geregelt auf ".Value('v_keller_newpct')." pct")
    }
   }
}
}


Das ganze lässt sich sicher deutlich verkleinern, verfeinern, beschleunigen ...

Danke für Eure Hilfe und Eure Interesse

Römi
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren

roemi

... und hier der zweite. Es werden verschiedene Szenen per IKEA Tradfri (2 Stück) geschaltet
{
if(["mySwitch2:002"])
{
fhem_set("v_BSNewEvent $EVENT");
Log(1, "BS Startevent $EVENT $DEVICE");
}
}
#- Mitte 1002 Urzustand---
{
if ([v_BSNewEvent] eq "1002")
{
if (Value("deConz_HUEDevice12") eq "off") {fhem_set("Bubenstube off") , fhem_set("deConz_HUEDevice12 on")};
Log 1, "BS Event 1002 Urzustand";
}
}
#- Oben 2002 Deckenlampe---
{
if ([v_BSNewEvent] eq "2002")
{
if (Value("deConz_HUEDevice12") eq "off") {fhem_set("deConz_HUEDevice12 on")} else {fhem_set("deConz_HUEDevice12 off")};
Log 1, "BS Event 2002 Deckenlampe";
}
}
#- Unten 3002 Fernseher ---
{
if ([v_BSNewEvent] eq "3002")
{
if (Value("deConz_HUEDevice8") eq "off") {fhem_set("deConz_HUEDevice8 on")} else {fhem_set("deConz_HUEDevice8 off")};
Log 1, "BS Event 3002 Fernseher";
}
}
#- Links 4002 Schreibtisch ---
{
if ([v_BSNewEvent] eq "4002")
{
if (Value("HUEDevice17") eq "off") {fhem_set("HUEDevice17 on") , fhem_set("deConz_HUEDevice12 off") , Log(1, "BS Schreibtisch an")} else {fhem_set("HUEDevice17 off") , Log(1, "BS Schreibtisch aus")};
#Log 1, "BS Event 4002";
}
}
#- Rechts 5002 Party---
{
if ([v_BSNewEvent] eq "5002")
{
if (Value("deConz_HUEDevice5") eq "off")
  {
  fhem_set("deConz_HUEDevice5 on") ,
  fhem_set("deConz_HUEDevice4 on") ,
  fhem_set("deConz_HUEDevice2 on") ,
  fhem_set("deConz_HUEDevice12 off");
  }
  else
  {
  fhem_set("deConz_HUEDevice5 off") ,
  fhem_set("deConz_HUEDevice4 off") ,
  fhem_set("deConz_HUEDevice2 off");
  }
Log 1, "BS Event 5002 Party";
}
}
#- Bewegungsmelder ---
{
if ([mySensor24] eq "motion" and [v_BSNewEvent] eq "1002")
{
Log 1, "BS Event Bewegung Licht an";
fhem_set("deConz_HUEDevice12 on") if ([deConz_HUEDevice12] ne "on");
set_Exec("BubenstubeOff",180,'fhem_set("deConz_HUEDevice12 off") , Log(1, "BS Event Bewegung Licht aus")');
}
}
https://www.roemi.de ... von einem, der auszog, 5000 deutsche Biere zu probieren