[GELÖST] get Abfrage aus monitoring Modul wird nicht von Echo wiedergegeben

Begonnen von Wolle02, 05 April 2020, 17:42:02

Vorheriges Thema - Nächstes Thema

Wolle02

Hallo zusammen,

so richtig warm werde ich mit Perl einfach nicht, deshalb poste ich die Frage mal ins Anfängerforum.  ::)

Ich habe mir ein notify gebastelt, das prüfen soll, ob bei mir Fenster geöffnet sind. Wenn ja soll das Ergebnis des Moduls "monitoring" in eine Variable geschrieben werden und diese per Speak-Befehl auf einem Echo ausgegeben werden.

Das notify sieht so aus:

defmod test_n notify Testschalter {if (ReadingsVal("Fenster_monitoring","allCount","") > 0) {my $status=fhem("get Fenster_monitoring all");fhem("set ECHO_Buero speak ".$status)}}

Leider passiert einfach überhaupt nichts.
Wenn ich noch ein Log 2, $status dazwischen schreiben, wird das Ergebnis von $status auch korrekt ins Logfile geschrieben und wenn ich mit dem Inhalt von $status den Befehl "set ECHO_Buero speak Das Fenster "Wohnzimmer_West" ist seit kurzem geöffnet." direkt in die Befehlszeile schreibe, dann wird der Text auch korrekt vom Echo ausgegeben.

Kann mir bitte jemand auf die Sprünge helfen warum das nicht tut?

Danke und Gruß
Wolle

Otto123

#1
Hallo Wolle,

beim define (auch bei defmod) musst Du die ; verdoppeln! -> https://fhem.de/commandref_DE.html#command
defmod test_n notify Testschalter {if (ReadingsNum("Fenster_monitoring","allCount",-1) > 0) {my $status=fhem("get Fenster_monitoring all");;fhem("set ECHO_Buero speak ".$status)}}
Es triggert aber auf jeden Event von Testschalter, das musst Du eventuell etwas schärfer machen! Schau dir die Sache im Eventmonitor an und dort kannst Du auch für den passenden Event ein notfy erstellen lassen.

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

Wolle02

Hallo Otto,

danke für deine Unterstützung. Das hatte ich aber auch schon ausprobiert. Der Effekt ist leider der selber; nämlich gar keiner.

Dass der Testschalter auf jedes Event triggert ist klar; dient gerade nur dazu um das auszuprobieren ;-)

Gruß
Wolle

Otto123

und den Befehl so?
fhem("set ECHO_Buero speak $status")
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

Wolle02

Zitat von: Otto123 am 05 April 2020, 22:42:19
und den Befehl so?
fhem("set ECHO_Buero speak $status")

Komisch, da hätte ich jetzt erwartet, dass er $status als gesprochenes Wort ausgibt. Aber auch in dieser Version passiert nichts. Der Inhalt der Variablen wird aber nach wie vor korrekt ins Logfile geschrieben:

2020.04.06 05:54:51 3: get Fenster_monitoring all : Die folgenden 3 Fenster sind schon länger geöffnet:
- Kinderzimmer_Nord
- Küche
- Schlafzimmer_Ost



Otto123

Moin,

innerhalb von "$variable" wird die Variable aufgelöst, innerhalb von '$variable' nicht.
Es gibt doch nur drei Möglichkeiten warum "nichts" passiert:
notify triggert nicht - hast Du ausgeschlossen durch den Test mit Log Eintrag.
Dein Ausführungsteil funktioniert nicht:
- Die if Bedingung wird nicht wahr - hast Du ausgeschlossen durch Log Eintrag, oder hast Du den ohne if gemacht?
- Der Teil  nach der Bedingung funktioniert nicht.

Teste doch "von hinten" mal alles einzeln in der Kommandozeile.
set ECHO_Buero speak Test
{fhem("set ECHO_Buero speak Test")}
{my $status="Test";;fhem("set ECHO_Buero speak $status")}
{my $status=fhem("get Fenster_monitoring all");;fhem("set ECHO_Buero speak $status")}
{if (1) {fhem("set ECHO_Buero speak Test")}}
{if (ReadingsNum("Fenster_monitoring","allCount",-1) > 0) {fhem("set ECHO_Buero speak Test")}}
{if (ReadingsNum("Fenster_monitoring","allCount",-1) > 0) {my $status=fhem("get Fenster_monitoring all");;fhem("set ECHO_Buero speak $status")}

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

Bezugnehmend auf den vermuteten Verdacht von Otto und dem gelöschten Beitrag von Joachim:

Gäbe es denn die Möglichkeit die Meldung

Help:

No argument given.

More informations: https://mwinkler.jimdo.com/smarthome/eigene-module/echodevice/#Set


ausgeben zu lassen, wenn $status wirklich leer wäre ?

Gruß

Thomas

Wolle02

#7
Hallo Otto,

zunächst mal vielen Dank, dass du mit so einer großen Vehemenz zu helfen versuchst. Das find ich wirklich toll.  :D

Du hast ja netterweise die Codezeilen schon vorgegeben. Ich habe sie alle der Reihe nach durchgetestet. Das Ergebnis ist so wie ich es erwartet habe (aber nicht verstehe):

set ECHO_Buero speak Test
funktioniert

{fhem("set ECHO_Buero speak Test")}
funktioniert

{my $status="Test";;fhem("set ECHO_Buero speak $status")}
funktioniert

{my $status=fhem("get Fenster_monitoring all");;fhem("set ECHO_Buero speak $status")}
funktioniert nicht

{if (1) {fhem("set ECHO_Buero speak Test")}}
funktioniert

{if (ReadingsNum("Fenster_monitoring","allCount",-1) > 0) {fhem("set ECHO_Buero speak Test")}}
funktioniert

{if (ReadingsNum("Fenster_monitoring","allCount",-1) > 0) {my $status=fhem("get Fenster_monitoring all");;fhem("set ECHO_Buero speak $status")}
funktioniert nicht

Es funktioniert also nur dann nicht, wenn der Echo den Inhalt einer Variablen ausgeben soll, die zuvor mittels Get aus dem Monitoring Modul geholt wurde. Ich verstehe nur nicht warum das Ergebnis dieses Get korrekt in das Logfile geschrieben wird, aber die Ausgabe via Echo scheitert, obwohl eine direkt vorgegebene Variable wie z.B. my $status="Test" korrekt funktioniert.

@TomLee:
Ich verstehe leider deine Frage nicht wirklich wie eine solche Ausgabe mit

Help:

No argument given.

More informations: https://mwinkler.jimdo.com/smarthome/eigene-module/echodevice/#Set


funktioniert.

MadMax-FHEM

Hmmm, dann hätte ich meinen Beitrag doch nicht löschen sollen/brauchen ;)

Dachte ich wäre auf dem "falschen Dampfer"...

Der get liefert nichts zurück, sondern aktualisiert (verm.) nur Readings...

D.h. du musst sehen wo (welche Readings) der/die gewünschte Wert/Werte stehen und dann per ReadingsVal("DeviceName","ReadingName","na") abfragen und ausgeben...

Ich habe zu dem Zweck (allerdings ohne nennung des Fensters sondern nur "generell" alle zu/auf) einfach einen "Sammeldummy" der den "Gesamtfensterstatus" sammelt und den kann ich abfragen:

Alexa, sind alle Fenster geschlossen?

Und es kommt dann: alle Fenster ist geschlossen ;) oder: alle Fenster ist geöffnet ;)

Hier mal mein "raw definition":


defmod dmAlleFenster dummy
attr dmAlleFenster alexaName alle Fenster
attr dmAlleFenster alias Übersicht aller Fenster
attr dmAlleFenster genericDeviceType contact
attr dmAlleFenster group Fenster und Türen
attr dmAlleFenster homebridgeMapping clear ContactSensorState:contact,values=closed:CONTACT_DETECTED;;open:CONTACT_NOT_DETECTED
attr dmAlleFenster icon fts_window_2w_open_l
attr dmAlleFenster readingList contact
attr dmAlleFenster room Eingang,alexa
attr dmAlleFenster setList open closed
attr dmAlleFenster userReadings contact {ReadingsVal($NAME,"state","n.a.")}


Das userReadings ist nicht nötig (hatte nur noch keine Zeit/Lust das auf "state" umzustellen)...
...dann muss das homebridgeMapping entsprechend auf "state" geändert werden...

Hatte es auch mal mit Structure versucht, da bin ich aber nicht so zurecht gekommen... ;)

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)

Wolle02

Hallo Joachim,

auch dir danke für deinen Tip. Als Workaround würde ich das, wenn es nicht anders geht, dann auch so ähnlich machen.

Aber ich kann deinem Hinweis

ZitatDer get liefert nichts zurück, sondern aktualisiert (verm.) nur Readings...

nicht so ganz folgen, denn wie ich ganz zu Anfangs schrieb

ZitatWenn ich noch ein Log 2, $status dazwischen schreiben, wird das Ergebnis von $status auch korrekt ins Logfile geschrieben

Das ist ja genau das was mich irritiert. In der Variablen ist scheinbar schon was "drin", aber es wird nicht ausgegeben, wobei die Ausgabe komischerweise korrekt funktioniert, wenn ich mit

{my $status="Test";;fhem("set ECHO_Buero speak $status")}

die Variable "direkt" befülle.

????????

Otto123

#10
Vermutung: get liefert keinen String zurück sondern irgendwas anderes - Log wandelt das in einen String dein ECHO nicht.
Das ist ein hash auf ein Array oder ein Array oder so?
Zitat- Kinderzimmer_Nord
- Küche
- Schlafzimmer_Ost

Versuch das mal so - aber ich fische da ziemlich im Trüben :)
my $status=join(" ",fhem("get Fenster_monitoring all"))


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

Wolle02

Tja, der letzte Versuch hat leider auch kein Ergebnis gebracht. Aber nun gut, wieder was gelernt....und sei es nur, dass es so halt nicht funktioniert. Wie Joachim ja aufgezeigt hat gibt es ja noch andere Herangehensweisen.

Ich danke euch auf jedenfall sehr.... ihr habt mir trotzdem sehr geholfen.

Viele Grüße.......und bleibt gesund
Wolle

Otto123

Wolle, ich will Dich mal ermutigen noch ein bisschen zu suchen, vielleicht findest Du ja was. Wenn Log das in einen String wandeln kann ...

Vielleicht muss man ja noch etwas manipulieren, Sonderzeichen entfernen, Zeilenumbrüche oder irgend so etwas.

Ich meine Du sagst es passiert nichts, aber die Wahrheit ist doch erstmal: Echo sagt nichts - oder?
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

Wolle02

Zitat von: Otto123 am 07 April 2020, 22:55:31
Ich meine Du sagst es passiert nichts, aber die Wahrheit ist doch erstmal: Echo sagt nichts - oder?

Richtig, aber ich weiß nicht wie ich sonst da weiterforschen soll. Ich halte das schon im Hinterkopf, aber zunächst mal muss ich wegen des WAF zu einer Lösung kommen. Wenn die Pflicht erledigt ist, kommt die Kür.  ;)

frank

probiere mal mit einem zusätzlichen sleep, also so:

{my $status=fhem("get Fenster_monitoring all");;fhem("sleep 1; set ECHO_Buero speak $status")}
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html