Shelly Motion Statusübergabe an TelegramBot

Begonnen von shootingstar, 14 März 2021, 11:26:48

Vorheriges Thema - Nächstes Thema

shootingstar

Hallo in die Runde,
ich habe meinen ersten Shelly Motion schon erfolgreich in FHEM eingebunden. Falls eine Bewegung bzw., dass keine Bewegung mehr erkannt wird, möchte ich diesen Status per TelegramBot versenden. Bei beiden Events wird über ein Notify schon der TelegramBot getriggert und es wird eine Nachricht versendet. Allerdings bekomme ich den Status nicht übergeben.  >:( Vielleicht hat jemand eine Idee und kann mir da auf die Sprünge helfen?
Gruß Andreas

Hier das Notify:
define motiontest notify MQTT2_shellymotionsensor_60A4239A622C:status_motion.* {{my $motion_Status = Value("MQTT2_shellymotionsensor_60A4239A622C:. status_motion");; fhem ("set teleBot message Motion ist: $motion_Status")}}

Hier das MQTT Device des Motion:
define MQTT2_shellymotionsensor_60A4239A622C MQTT2_DEVICE shellymotionsensor_60A4239A622C
setuuid MQTT2_shellymotionsensor_60A4239A622C 6037f751-f33f-f3ef-7efb-959de18b75ce8d2a
attr MQTT2_shellymotionsensor_60A4239A622C IODev mymqtt
attr MQTT2_shellymotionsensor_60A4239A622C alias Motion1
attr MQTT2_shellymotionsensor_60A4239A622C devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "true"?"10px-kreis-gruen":"10px-kreis-rot";; \
my $moti = ReadingsVal($name,"motion","false") eq "true"?"people_sensor ":"message_presence";; \
"<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage($onl)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($moti)."</a>"}
attr MQTT2_shellymotionsensor_60A4239A622C event-on-change-reading status_motion
attr MQTT2_shellymotionsensor_60A4239A622C genericDeviceType ignore
attr MQTT2_shellymotionsensor_60A4239A622C icon motion_detector
attr MQTT2_shellymotionsensor_60A4239A622C model shellymotion
attr MQTT2_shellymotionsensor_60A4239A622C readingList shellies/shellymotionsensor-60A4239A622C/online:.* online\
  shellies/shellymotionsensor-60A4239A622C/sensor/status:.* { json2nameValue($EVENT) }\
  shellies/shellymotionsensor-60A4239A622C/announce:.* { json2nameValue($EVENT) }\
  shellies/announce:.* { $EVENT =~ m,..id...shellymotionsensor-60A4239A622C...mac.*, ? json2nameValue($EVENT) : return }\
shellymotionsensor_60A4239A622C:shellies/shellymotionsensor-60A4239A622C/status:.* { json2nameValue($EVENT, 'status_', $JSONMAP) }
attr MQTT2_shellymotionsensor_60A4239A622C room Homekit,MQTT2
attr MQTT2_shellymotionsensor_60A4239A622C setList x_update:noArg shellies/shellymotionsensor-60A4239A622C/command update_fw\
  x_mqttcom shellies/shellymotionsensor-60A4239A622C/command $EVTPART1
attr MQTT2_shellymotionsensor_60A4239A622C stateFormat true:Bewegung false:ruhig

MadMax-FHEM

#1
Musst du halt lesen wie Value funktioniert:

my $value=Value("Devicename")

Besser als Value (weil das STATE "abfrägt"/"lifert" und NICHT state! Und STATE durch z.B. stateFormat etc. beeinflusst wird/werden kann) ist ReadingsVal:

my $ReadingValue = ReadingsVal("Devicename","Readingname","Ersatzwert")

Oder eben bei nur numerischem Anteil: ReadingsNum

AttrVal usw. gibt es auch noch...

EDIT: und besser lists als "defines"...

EDIT: und die äußeren geschweiften Klammern sind unnötig. https://wiki.fhem.de/wiki/Klammerebenen

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Hi,

steht der Status nicht einfach mit im $EVENT? Also $EVTPART1 oder so?

https://wiki.fhem.de/wiki/Notify

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

TomLee

#3
Ich mein in EVTPART2.

Es bleibt aber bei der Frage, die ich mir übrigens seit 2 Tagen auch stelle, warum der message-Befehl mit der Variablen nicht klappt.

Mit Pushbullet klappt das problemlos:

{my $ret = ReadingsVal("Echo","list_SHOPPING_ITEM","nix");; $ret =~ s/,/\n/g;; return fhem("set pshmsg message Einkaufsliste | $ret")}

Mit Telegrambot nicht, Beispiel ohne Zeilenumbruch (weil das bei Telegrammbot wieder anders ist) und nur zum nachvollziehen:

{my $ret = ReadingsVal("Echo","list_SHOPPING_ITEM","nix");;return fhem("set tb_TelegramBot message $ret")}

edit:
Zitat(weil das bei Telegrammbot wieder anders ist)
doch nicht anders, falsch in Erinnerung gehabt, dachte da war es beim \n plötzlich so das man es escapen \\n musste
{my $ret = ReadingsVal("Echo","list_SHOPPING_ITEM","nix");;$ret =~ s/,/\n/g;;return fhem("set tb_TelegramBot message $ret")}

Log:

2021.03.14 12:58:38 3: TelegramBot_Callback tb_TelegramBot: resulted in NonBlockingGet timed out on read from <hidden> after 30s from SendIt
2021.03.14 12:58:38 3: TelegramBot_Callback tb_TelegramBot: Reached max retries (ret: NonBlockingGet timed out on read from <hidden> after 30s) for msg 1105132064 : peperoni,kondensmilch,senf,backpapier,mülltüten,viss_kraft_glanz,bla ...


auch nicht:

{my $ret = ReadingsVal("Echo","list_SHOPPING_ITEM","nix");;return fhem("set tb_TelegramBot message ".$ret)}

MadMax-FHEM

@TomLee: irgendwo hier im Forum wird "behauptet" es läge an den Umlauten...

Bei mir klappt das problemlos mit einer Variablen und mit Umlauten...

Allerdings bin ich (aktuell) nicht ganz aktuell ;)

War einige Wochen unterwegs und kam nicht dazu mal wieder ein Update einzuspielen...

Mal sehen, ob es danach auch nich geht...

EDIT: wobei es zumindest für Telegram nichts aktuelleres gibt... Evtl. wurde ja an einer anderen Stelle "geschraubt"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

Zitatirgendwo hier im Forum wird "behauptet" es läge an den Umlauten...

Hatte es gelesen, seitdem aber nicht nochmal mit beschäftigt und jetzt/hier nicht dran gedacht  ::)

Nachdem ich jetzt die Einträge mit Umlauten gelöscht habe klappts.

Mein System ist aktuell.

Otto123

Zitat von: TomLee am 14 März 2021, 13:00:21
Ich mein in EVTPART2.
Hängt davon ab was da alles steht, aber eigentlich ist es ja so:
NAME:EVTPART0 EVTPART1 EVTPART2
EVTPART0 sollte das Reading sein, die EVTPART1 das erste Wort im Reading usw.
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

TomLee

ZitatEVTPART0 sollte das Reading sein, die EVTPART1 das erste Wort im Reading usw.

Ja, danke, jetzt ist es hoffentlich auch in der Birne.

Mein Fehler war hier das ich es mit

EG_Echo_Kueche:voice:.*


"zwischendurch" nicht korrekt am Tablet nachvollzogen habe, weil manchmal steht da scheinbar nochmal echo (also das Aktivierungswort) mit im Reading und manchmal nicht.


TomLee

ZitatBei mir klappt das problemlos mit einer Variablen und mit Umlauten...

Allerdings bin ich (aktuell) nicht ganz aktuell ;)

War einige Wochen unterwegs und kam nicht dazu mal wieder ein Update einzuspielen...

Mal sehen, ob es danach auch nich geht...

Hey Joachim.

hab mich erst vor ein paar Tagen das erste mal mit TelegramBot beschäftigt.

Wenn du ein update machst kannst das dann so bestätigen:


set tb_TelegramBot message öl\nfettlöser


oder auch vorsichtshalber noch mit dem msg-Befehl

set tb_TelegramBot msg öl\nfettlöser

klappt problemlos.


{my $ret = ReadingsVal("Echo","list_SHOPPING_ITEM","nix");;$ret =~ s/,/\n/g;;return fhem("set tb_TelegramBot msg $ret")}

nur wenn in der Liste keine Umlaute vorkommen.
Es geht also nur nicht wenn in der Variablen Umlaute vorkommen.


MadMax-FHEM

Ich mache das auch über Variablen MIT Umlauten...

Und wie geschrieben: bzgl. Telegram bin ich aktuell...

Wenn mal Zeit ist, mache ich mal ein Update und schaue mal...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

#10
Zitat von: MadMax-FHEM am 14 März 2021, 16:12:22
und schaue mal...

Wsl. hast du das hier erwähnte Attribut gesetzt ?

MadMax-FHEM

#11
Zitat von: TomLee am 15 März 2021, 13:58:37
Wsl. hast du das hier erwähnte Attribut gesetzt ?

;)

Habe ich gleich als erstes geprüft...
...wusste nur da war ein Attribut (aber nicht welches), ist aber nicht gesetzt...

Aber ich habe noch kein update gemacht (allerdings: Telegram ist/war ja schon aktuell)...

EDIT: also fhem ist aktuell (gestern oder so) und ich habe das Attribut immer noch nicht gesetzt und trotzdem kommen meine Nachrichten MIT Umlauten an. Die Nachricht wird aus Readings abgefragt ($Description = ReadingsVal) und dann "zusammengebaut": $message .= $Description usw.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)