[G E L Ö S T] - im String nach ReadingsVal nochmal Text

Begonnen von kblc, 09 März 2018, 11:30:50

Vorheriges Thema - Nächstes Thema

kblc

Hallo.
Das schöne an FHEM ist, dass man so viel neues entdecken kann. Erst kürzlich habe ich wieder etwas gesucht. Wir benötigen einen einfachen Pflegeruf im Haus. Da bin ich auf TelegramBot gestoßen. Das ist eine echt tolle Sache. Den Pflegeruf habe ich eingerichtet und der hat für die 5 Tage, an denen wir den (vorübergehend) brauchten, auch super funktioniert.

Nun wollte ich aber einiges per Telegram abfragen um mein FHEM mit dieser tollen Telegram-Funktion zu erweitern. Ich gebe in Telegram "StatusWohnzimmer" ein und es soll eine Übersicht kommen:
Die Lampe am Tisch ist an,
die Temperatur 20°C, die Hochtischlampe ist an,
die Stehlampe ist aus, der Fernseher ist aus.


Bei mir kommt aber nur an:
Die Lampe am Tisch ist status1,
die Temperatur 20°C, die Hochtischlampe ist status2,
die Stehlampe ist status3, der Fernseher ist status4.


status 0 ist die Temperatur. Die klappt. So verkehrt kann ich ja nicht liegen.

So, ich habe folgendes in FHEM versucht (erst mal mit 4 ReadingsVal, mit einem hat es ja geklappt):

elsif ($EVTPART1 eq 'StatusWohnzimmer') {
        my $state0 = ReadingsVal("HM_45F2FF_Weather", "state", "");
        my $state1 = ReadingsVal("HM_22A6D2", "state", "");
        my $state2 = ReadingsVal("HM_2FE643", "state", "");
        my $state3 = ReadingsVal("HM_1B3694", "state", "");

        fhem("set teleBot send Die Temperatur im Wohnzimmer ist state0,  \n der Fernseher ist state1 \n Das Licht der Wohnzimmerdecke ist state2. \n Die Wohnzimmereinbaulampe an der Dachschräge ist state3. \n Vielen Dank der Nachfrage. Soll ich was ändern?");
    }


Auch habe ich probiert:

elsif ($EVTPART1 eq 'StatusWohnzimmer') {
#fhem("set teleBot send Die Temperatur im Wohnzimmer ist ". ReadingsVal("HM_45F2FF_Weather", "state","") ". \n der Fernseher ist ".ReadingsVal("HM_22A6D2", "state","") ". \n Das Licht der Wohnzimmerdecke ist ".ReadingsVal("HM_2FE643", "state","")". \n Die Wohnzimmereinbaulampe an der Dachschräge ist ".ReadingsVal("HM_1B3694", "state","")". \n Vielen Dank der Nachfrage. Soll ich was ändern?");
    fhem("set teleBot send Die Temperatur im Wohnzimmer ist ". ReadingsVal("HM_45F2FF_Weather", "state",""));
}


Damit bekomme ich immer wieder eine Fehlermeldung.

Was mache ich da falsch? Kann ich nicht mehrere ReadingsVal abrufen? Wenn ja, wie muss ich das machen, damit es klappt?

Ich würde mich echt sehr freuen, wenn mir bei meinem (hoffentlich kleinen) Problem jemand helfen kann.

Vielen Dank schon mal

Kai aus Oberfranken.
SPS, Arduino, Controllino, Sensortechnik, Elektronik

nils_

deine textbeispiele passen aber überhaupt nicht zu deinem code....  :o
du baust die variablen direkt in den text ein, dann ist klar warum er das genauso rausschreibt.

versuch mal:
elsif ($EVTPART1 eq 'StatusWohnzimmer') {
        my $state0 = ReadingsVal("HM_45F2FF_Weather", "state", "");
        my $state1 = ReadingsVal("HM_22A6D2", "state", "");
        my $state2 = ReadingsVal("HM_2FE643", "state", "");
        my $state3 = ReadingsVal("HM_1B3694", "state", "");

        fhem("set teleBot send Die Temperatur im Wohnzimmer ist " . $state0 .",  \n der Fernseher ist " . $state1 ."\n Das Licht der Wohnzimmerdecke ist " . $state2 .". \n Die Wohnzimmereinbaulampe an der Dachschräge ist " . $state3 .". \n Vielen Dank der Nachfrage. Soll ich was ändern?");
    }


viele Wege in FHEM es gibt!

Otto123

Hallo Jungs,

schon mal was von set magic gehört?
set teleBot send Die Temperatur im Wohnzimmer ist [HM_45F2FF_Weather:state]" usw.

sollte die einfache Variante sein.

Und sollte das nicht gehen gibt es noch Value("HM_45F2FF_Weather") der nimmt den STATE - falls der wie so oft gleich state ist, wäre das auch etwas "kürzer"

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

kblc

Danke für die schnelle Hilfe.


Stimmt nils, ich habe einfach schnell alles zusammengeschrieben ohne darauf groß zu achten. Sorry.

Ja Otto, es hat wunderbar geklappt.
Vielen Dank mal wieder.

Hier noch mein funktionierender Code

elsif ($EVTPART1 eq 'Status') {
fhem("set teleBot send Die Temperatur im Wohnzimmer ist [HM_45F2FF_Weather:state]. \n der Fernseher ist [HM_22A6D2:state]. \n Das Licht der Wohnzimmerdecke ist [HM_2FE643:state]. \n Die Wohnzimmereinbaulampe an der Dachschräge ist [HM_1B3694:state]. \n Vielen Dank der Nachfrage. Soll ich was ändern?");
}


schönen Tag noch

Kai aus Oberfranken
SPS, Arduino, Controllino, Sensortechnik, Elektronik

nils_

Zitat von: Otto123 am 09 März 2018, 12:36:45
schon mal was von set magic gehört?

immer diese zauberkunststücke :D
trotzdem danke @ Otto
ich denke an sowas auch nicht immer  ::)
viele Wege in FHEM es gibt!