FHEM/Perl String Erkennung

Begonnen von Kharim, 15 März 2016, 07:04:17

Vorheriges Thema - Nächstes Thema

Kharim

Hallo Zusammen,

ich habe hier einen SMS gesteuerten Raspi/FHEM.
Der SMS Inhalt wird von extern auf einen Dummy übergeben.
Somit enthält der Dummy sozusagen den zu verarbeitenden Befehl.
Mit einer einfachenn if dummy eq "string" kann ich soweit schon arbeiten.

Nun möchte ich aber Befehle der Art "befehl wert" (also zb "Heizung 20" für 20°C) verarbeiten können.
Ich will nun also nur auf den ersten Teil des Strings vergleichen und den zweiten Teil als Wert zur Weiterverarbeitung speichern.

Wie stelle ich das an?

Danke,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

Otto123

Moin Kharim,

das setzen des Dummy erzeugt eigentlich einen Event, Du kannst ein notify auf den Dummy triggern lassen und hast als "Übergabe" den Event --> $EVENT. Und mittels $EVTPART1 und $EVTPART2 Zugriff auf die Teilstücke.

Du willst ja sowieso nur dann etwas auslösen wenn die SMS den Dummy setzt.

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

Ellert

Mit DOIF etwa so:

define deinDOIF DOIF ([dummy:"^ersterTeil"]) (setreading dummy nurWert [dummy:state:d])

und dem Attribut "do always".

Kharim

Zitat von: Otto123 am 15 März 2016, 09:18:20
Moin Kharim,

das setzen des Dummy erzeugt eigentlich einen Event, Du kannst ein notify auf den Dummy triggern lassen und hast als "Übergabe" den Event --> $EVENT. Und mittels $EVTPART1 und $EVTPART2 Zugriff auf die Teilstücke.

Du willst ja sowieso nur dann etwas auslösen wenn die SMS den Dummy setzt.

Gruß Otto

Hm, gute Idee, aber wenn ich das jetzt versuche umzusetzen bekomme ich folgende Meldung im Log:
2016.03.15 21:00:31 3: nf_SMSEmpfang return value: Global symbol "$EVTPART1" requires explicit package name at (eval 3031) line 36.
Global symbol "$EVTPART2" requires explicit package name at (eval 3031) line 38.


Die Bedingung dazu sieht folgend aus (Am Beispiel eines Guthabens):
if($EVTPART1 eq "Guthaben")
{
fhem("set Guthaben $EVTPART2");
}


Das ist ein Teil einer Notify, die an dem Dummy des SMS Strings hängt und wiederum einen Dummy "Guthaben" setzen soll....

Danke,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

dev0

Da Du weder die Notify Definition noch das Event gepostet hast, kann man nur raten, dass die regexp des Notify zu weit gefasst ist.

Kharim

Sorry, ich versuch es nochmal zusammen zu fassen.

Die Notify ist wie folgt definiert:

SMSEmpfang:.* {
[...]
if($EVTPART1 eq "Guthaben")
{
   fhem("set Guthaben $EVTPART2");
}
}

Der Dummy SMSEmpfang selbst wird von einem Shell Script mittels "fhem.pl ip:port set SMSEmpfang 'Guthaben 345'" gesetzt - das funktioniert auch.
Aber eben die IF, die den Befehl "Guthaben" erkennen und den Wert auf den Dummy Guthaben schreiben soll, reagiert nicht.
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)

dev0

Zitat
SMSEmpfang:.*
Ich gehe immer noch davon aus, dass .* zu weit gefasst ist und ein Event das Notify triggert, dass kein $EVTPART1 beinhaltet.
Wenn Du in einem Notify Events mit unterschiedlich vielen Argumenten verarbeiten möchtest, dann kannst Du abfragen ob das Argument definiert ist "if(defined $EVTPART1)" oder mehrere Notifies verwenden, die die regexp des Notify enger fassen, damit diese Situation nicht auftritt.

Otto123

Sorry Kharim, was ich gerade sehe Du hast den $EVTPART einfach so genommen, das "Array" beginnt aber bei 0. Also
$EVTPART0 $EVTPART1 usw...

Wie der Event genau aussieht, solltest Du Dir im Eventmonitor anschauen. Und dann den Filter schärfer bauen, nicht nur .*

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

Kharim

Zitat von: Otto123 am 16 März 2016, 11:46:03
Sorry Kharim, was ich gerade sehe Du hast den $EVTPART einfach so genommen, das "Array" beginnt aber bei 0. Also
$EVTPART0 $EVTPART1 usw...

Wie der Event genau aussieht, solltest Du Dir im Eventmonitor anschauen. Und dann den Filter schärfer bauen, nicht nur .*

Gruß Otto

Das war der Fehler.
if($EVTPART0 eq "Guthaben")
{
fhem("set Guthaben $EVTPART1");
}

So funktioniert es nun :-)
Erstaunlicher Weise erscheint im EventMonitor erst das Setzen vom Dummy Guthaben und danach das Setzen von Dummy SMSEmpfang, an dem ja erst die Notify hängt.
Hätte es genau anders herum erwartet...
2016-03-18 06:45:15 dummy SMSEmpfang bla
2016-03-18 06:45:23 dummy Guthaben 3,45
2016-03-18 06:45:23 dummy SMSEmpfang Guthaben 3,45

Ich danke euch,
Kharim
Raspberry Pi 2 + Minibian + 2x MAX Cube CUN (868/433Mhz) + Thermostate + Fensterkontakte + Taster+RGB-LED Band über pigpiod + TFA Sensoren 30.3169/3125
Raspberry Pi 2 + Minibian +Z-Wave (USB) + Bewegungsmelder + Fensterkontakt + Sirene + SMS Steuer-/Benachrichtigung (ohne Internet)