Hauptmenü

String-Übergabe scheitert

Begonnen von Gidiano, 26 August 2019, 23:03:30

Vorheriges Thema - Nächstes Thema

Gidiano

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
Grüße,
Christian

Otto123

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
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

Gidiano

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.

Grüße,
Christian