FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Gidiano am 26 August 2019, 23:03:30

Titel: String-Übergabe scheitert
Beitrag von: Gidiano am 26 August 2019, 23:03:30
Hallo Leute,

normalerweise finde ich schlussendlich immer Dank der reichhaltigen Internet posts eine Lösung, aber diesmal stehe ich auf dem Schlauch.
Wie alles begann.... (verzeiht mir, wenn ich was falsch bezeichne)
Mittels webhooks sende ich Informationen an Synology Chat (Messenger, der die gleiche Technik wie Slack nutzt).
Das geht soweit gut.
Per HTTPMOD sende ich Info an den zugehörigen webhook, z.B.:
https://<URL>:5001/webapi/entry.cgi?api=SYNO.Chat.External&method=incoming&version=2&token="<TOKEN>"&payload={"text": "$val"}

Per {"text": "$val"} wird ein String übergeben, der dann im Chat erscheint (z.B. Waschmaschine fertig).
Das geht in diesem Falle mit der DEF eines DOIF so:

([Washer_SenPwr]<5.0)
(set SynoChat Waschmaschine :alarm_clock: Wäsche fertig :zzz:)
(set Waesche_fertig 1)
DOELSEIF ([Washer_SenPwr]>0.3)
(set SynoChat Waschmaschine :stopwatch: Waschmaschine gestartet :sweat_drops:)
(set Waesche_fertig 0)


(die Strings mit den Doppelpunkten sind Icon-Codes)

Jetzt möchte ich aber bei einem Thermometer mit 6 Kanälen der z. B. den Kanal mit in den übergebenen String einbauen:

([WLANthermo:channel_1_alarm] eq 1 and [WLANthermo:channel_1_temp] > [WLANthermo:channel_1_max])
(set SynoChat WLANThermo :warning: <HIER KANALINFO>Temp. zu hoch :hotsprings:)

Nebenbei kriege ich den strict subs Fehler, aber ich denke, das ist eine andere Baustelle.

Und hier beginnt das Problem:
Ich kriege die Info da nicht rein. Nicht mit fhem code und Variablen die ich vorher befülle und einfüge, oder sonstwie.
Es wird immer gnadenlos der "Text" übermittelt (also $channel als Text statt des Wertes z.B.)

Ich bin mir sicher, es fehlt ein Profi-Tip!

Teile des Reading des Device WLANthermo:

...


 
 
 
 
 
 
 
 
channel_1_alarm12019-08-26 14:39:57
channel_1_color#0C4C882019-08-26 14:39:57
channel_1_max200.002019-08-26 14:39:57
channel_1_min10.002019-08-26 14:39:57
channel_1_nameGrill2019-08-26 14:39:57
channel_1_number12019-08-26 14:39:57
channel_1_temp28.902019-08-26 14:39:57
channel_1_typ02019-08-26 14:39:57
...

Die Daten kommen per MQTT.
"channel_1_name" möchte ich gern in den String einbauen.

Entscheidende Tipps werden mit unendlicher Dankbarkeit geahndet :-)

Viele Grüße
Christian
Titel: Antw:String-Übergabe scheitert
Beitrag von: Otto123 am 27 August 2019, 00:32:53
Hallo Christian,

ich bin nicht sicher was Du wirklich machen willst,, aber ich mach ein Beispiel:
Ich habe einen Dummy ee und einen Dummy wert. Im Reading state vom Dummy wert steht eine Zahl (29).
set ee Wert von Dummy w1 [w1:state] in voller Höhe
Nach diesem Befehl steht im state des dummy ee der Satz
ZitatWert von Dummy w1 29 in voller Höhe
Der Ausdruck [w1:state] wird also von FHEM durch den state von Device w1 ersetzt.

Das Ganze nennt sich set magic und ist unter der Beschreibung in der Doku beim set Befehl zu finden.

Gruß Otto
Titel: Antw:String-Übergabe scheitert
Beitrag von: Gidiano am 27 August 2019, 11:54:01
Hallo Otto,

mit etwas Abstand bin ich es nun neu angegangen und es klappt.
Ich habe nun einfach das Reading in den String einfügen können.
Keine Ahnung, was ich anfangs falsch gemacht hatte, aber es wurde niemals der Variablen- oder Reading-Inhalt verwendet.
Seltsam und peinlich.

Mit diesem DOIF geht es jetzt:
([WLANthermo:channel_1_alarm] eq 1 and [WLANthermo:channel_1_temp] > [WLANthermo:channel_1_max])
(set SynoChat WLANThermo :warning: Temp. Kanal [WLANthermo:channel_1_name] zu hoch :hotsprings:)


Ergebnis als screenshot im Anhang.