FHEM übergibt einen Wert an FHEM

Begonnen von kblc, 24 Oktober 2017, 21:13:38

Vorheriges Thema - Nächstes Thema

kblc

Hallo,

ich hab wieder mal eine Frage.

Ich möchte einen Wert eines FHEM System an ein anderes übertragen. Aber eben nur einen Wert.

Firmata_ANALOG soll den Beweungssensor auf 192.168.67.136 den Wert geben.
Was habe ich vergessen? Das ist bestimmt wieder so eine Kleinigkeit.
Ich bewundere übrigens, wie schnell ihr manchmal meine Fehler, an denen ich Tagelang grüble, innerhalb von Sekunden löst. Dankeschön an dieser Stelle schon mal und auch noch mal.


Folgenden Ansatz habe  ich:

Firmata_ANALOG = Bewegungsmelder oder -sensor
Beweungssensor = Dummy auf dem anderen FHEM System
Der Wert ist eine (max) 4Stellige Zahl also 1024 bis 0




define Firmata_ANALOG FRM_AD 14
attr Firmata_ANALOG IODev FIRMATA
attr Firmata_ANALOG event-min-interval reading:5
attr Firmata_ANALOG event-on-change-reading reading:2
attr Firmata_ANALOG stateFormat reading
#attr Firmata_ANALOG webCmd state

define Firmata_ANALOG_Notify notify Firmata_ANALOG:.*  {GetFileFromURL 'http://192.168.78.136:8083/fhem?cmd.Beweungssensor=set%20Beweungssensor%20$EVENT'}



Hier noch ein list

Internals:
   DEF        14
   IODev      FIRMATA
   NAME       Firmata_ANALOG
   NR         78
   PIN        14
   STATE      834
   TYPE       FRM_AD
   resolution 10
   Readings:
     2017-10-24 21:09:16   reading         834
     2017-10-24 21:04:32   state           Initialized
Attributes:
   IODev      FIRMATA
   event-min-interval reading:5
   event-on-change-reading reading:2
   stateFormat reading


Das Ergebnis, das ich jetzt habe ist, dass beim Beweungssensor "$EVENT" kommt. Aber da sollte ja dann eine Zahl stehen.
Vielen Dank

KBLc
SPS, Arduino, Controllino, Sensortechnik, Elektronik

Wzut

nimm mal statt der einfachen Anführungszeichen ' die Doppelten "
Perl löst Veriablen (in deinem Fall $EVENT ) in einfachen Anführungszeichen nicht auf, innerhalb doppelter schon
Oder klebe die Variable an den String :
'http://192.168.78.136:8083/fhem?cmd.Beweungssensor=set%20Beweungssensor%20'.$EVENT
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

kblc

Danke für die schnelle Antwort.
Mit doppelten " hat es gar nichts gesendet. Mit dem $EVENT dahinter setzen auch nicht. Ich habe das erkannt am EVENT monitor:

Ach ja und noch ein Fehler meinerseits. Es ist kein Bewegungsmelder, sondern ein Fotowiderstand. Daher auch die Werte im 4Stelligen Bereich. Sorry. Ich habe es aktuell geändert. Daher ist der Auszug bereits mit den neuen Namen.

2017-10-24 21:35:32 dummy Fotowiderstand $EVENT
2017-10-24 21:35:34 dummy Fotowiderstand $EVENT
2017-10-24 21:35:35 dummy Fotowiderstand $EVENT
2017-10-24 21:35:36 dummy Fotowiderstand $EVENT
2017-10-24 21:35:37 dummy Fotowiderstand $EVENT
2017-10-24 21:35:38 dummy Fotowiderstand $EVENT
2017-10-24 21:35:39 dummy Fotowiderstand $EVENT
SPS, Arduino, Controllino, Sensortechnik, Elektronik

Wzut

ich habe eben beide Version getestet und beide gehen bei mir , allerdings wird sich sich dein log über den vielen Output freuen.
Sicher auch das du den ganzen Event haben möchtest und nicht nur den Wert mit $EVTPART1 ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

kblc

Danke.

Das ist merkwürdig. irgendwas mache ich falsch. Das hat bei mir noch nie so richtig geklappt. Aber $EVENT stimmt doch, oder?

SPS, Arduino, Controllino, Sensortechnik, Elektronik

Otto123

#5
Hi,

hast Du den Befehl mal einfach in der FHEM Befehlszeile getestet?
{GetFileFromURL 'http://192.168.78.136:8083/fhem?cmd.Beweungssensor=set%20Beweungssensor%20$EVENT'}
Geht nicht wegen '' da wird $EVENT nicht aufgelöst
{GetFileFromURL "http://192.168.78.136:8083/fhem?cmd.Beweungssensor=set%20Beweungssensor%20$EVENT"}
Geht eventuell  nicht wegen % und $ ? Muss man das nicht maskieren?
\% \$
Ich würde es ja einfach so machen, das geht auf alle Fälle:
Edit: Wegen den Beiträgen weiter unten habe ich den Code nachträglich geändert
"curl http://192.168.78.136:8083/fhem?cmd.Beweungssensor=set%20Beweungssensor%20$EVENT"

Falls der csrf Token abgeschaltet ist :)

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

Vielen Dank, ich habe es gerade geschafft.

Hier meine Lösung. Das war nicht einfach zu verstehen. Aber Commandref, Otto123 und Wzut haben mir sehr geholfen. Vielen Dank:

define Firmata_ANALOG_Notify notify Firmata_ANALOG.* "wget http://192.168.78.136:8083/fhem?cmd.Fotowiderstand=set%20Fotowiderstand%20$EVTPART1"
SPS, Arduino, Controllino, Sensortechnik, Elektronik

Wzut

#7
sicher es gibt halt 100 Wege nach Rom ....
Wenn es denn unbedingt wget sein muss :
Wirf mal einen Blick nach /opt/fhem, hier werden sich die HTML Rückgaben in der Form fhem?cmdxxxx stapeln.
D.h. wenn schon wget dann würde ich ihm immer das gleiche File für den Output zuweisen , z.B.
define Firmata_ANALOG_Notify notify Firmata_ANALOG.* "wget -O /tmp/dummy http://192.168.78.136:8083/fhem?cmd.Fotowiderstand=set%20Fotowiderstand%20$EVTPART1"
das -O ist keine Null sondern der Anfangsbuchstabe von Otto :)

Aber auch die erste Version sollte gehen, allerdings landet der HTML Output direkt im Logfile , es sei denn man gibt einfach ein undef zurück :
define Firmata_ANALOG_Notify notify Firmata_ANALOG.* {GetFileFromURL 'http://192.168.78.136:8083/fhem?cmd.Fotowiderstand=set%20Fotowiderstand%20'.$EVTPART1; return undef;}

Edit : das waren jetzt nun zwei der 100 Wege ... IMHO noch eleganter ist es den HTML Output direkt an der Quelle zu unterdrücken  z.B. dadurch das man noch ein XHR=1 in die URL bastelt :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Otto123

Zitat von: Wzut am 25 Oktober 2017, 09:19:57
sicher es gibt halt 100 Wege nach Rom ....
Wenn es denn unbedingt wget sein muss :
Wirf mal einen Blick nach /opt/fhem, hier werden sich die HTML Rückgaben in der Form fhem?cmdxxxx stapeln.
Moin,

eigentlich nicht, ich meine, bei dem Aufruf von Programmen mit Syntax  "Programm" landet der stdout im Logfile. In meinem Test in der FHEM Kommandozeile war das zumindest so.

Ich habe jetzt nochmal ein bisschen gelesen. Die Beschreibung im Wiki würde mich davon abhalten bei sowas einfach GetFileFromURL zu verwenden. -> blockierend
Die Aufrufe "<Programm>" werden nicht blockierend ausgeführt.

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

Wzut

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Otto123

Zitat von: Wzut am 25 Oktober 2017, 10:02:09
bei mir schon :)
bei mir auch  ;)
Hängt davon ab welche url man testet, mit den FHEM Kommandos passiert genau das - gut das wir drüber gesprochen haben.

Ich ändere meine Empfehlung auf curl. Da passiert nix.

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

Wzut

Zitat von: Otto123 am 25 Oktober 2017, 10:19:18
Ich ändere meine Empfehlung auf curl. Da passiert nix.
OK, dann hätten wir drei von den 100 ...
@all , Jungs & Mädels strengt euch mal ein bisssl mehr an  bis heute Abend sollten wir doch das Dutzend voll bekommen  ::)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Otto123

Als Zwischenstand möchte ich mal noch die Lösung ohne jede Ausgabe (weder Datei noch Eintrag im Log)  zeigen.
define Firmata_ANALOG_Notify notify Firmata_ANALOG.* "curl -s http://192.168.78.136:8083/fhem?cmd=set%20Fotowiderstand%20$EVTPART1"

Das mit XHR=1 zum Unterdrücken habe ich nicht hinbekommen, da wird trotzdem der Fortschritt von curl ins Logfile geschrieben.
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

Wzut

Zitat von: Otto123 am 25 Oktober 2017, 12:19:21
Das mit XHR=1 zum Unterdrücken habe ich nicht hinbekommen
"curl -s 'http://192.168.78.136:8083/fhem?XHR=1&cmd=set%20Fotowiderstand%20'$EVTPART1"
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Otto123

Ich habe noch ein wenig probiert. Mit meinem Gelaber über Erkenntnis kapere ich zwar jetzt etwas den Thread aber ich wollte es einfach verstehen :)
Mein Test Pi hat auf 8088 keinen csrf Token
curl http://192.168.178.80:8088/fhem erzeugt die Ausgabe der Startseite nach stdout
curl http://192.168.178.80:8088/fhem?XHR=1 erzeugt keine Ausgabe nach stdout
curl -o Ausgabe.txt http://192.168.178.80:8088/fhem erzeugt die Ausgabe der Startseite nach Datei und die Ausgabe des Fortschritts nach stdout
curl -o Ausgabe.txt http://192.168.178.80:8088/fhem?XHR=1 nur die Ausgabe des Fortschritts nach stdout obwohl keine Datei geschrieben wird
curl http://192.168.178.80:8088/fhem?cmd=set%20Lamp%20on erzeugt normalerweise(!) keine Ausgabe auf Kommandozeile(Putty) aber eine Ausgabe des Fortschritts ins Logfile bei Eingabe in Kommandozeile von FHEM

Hier kommt jetzt ein Problem mit Sonderzeichen & und ' ' auf der Kommandozeile zum tragen
curl http://192.168.178.80:8088/fhem?XHR=1&cmd=set%20Lamp%20on führt den set Befehl nicht aus.
Die folgenden beiden Varianten erzeugen keine Ausgabe und funktionieren:
curl 'http://192.168.178.80:8088/fhem?XHR=1&cmd=set%20Lamp%20on'
curl http://192.168.178.80:8088/fhem?XHR=1\&cmd=set%20Lamp%20on

Wie oben schon vermutet müssen die Sonderzeichen geschützt werden. Ich glaube das Problem ist unter Perl zwar ähnlich, aber nicht wirklich das Gleiche. Bei Dateinamen will die shell noch ? und = geschützt haben. Merkt man, wen man die oben erwähnten Dateien fhem?cmd=xxxx löschen will.
Jetzt könnte man noch probieren ob FHEM/Perl mit der Übergabe in " " noch irgendetwas verändert. Ich lasse das jetzt  ;)

curl -s unterdrückt in jedem Fall die Fortschrittsausgabe aber nicht die Ausgabe der Webantwort.

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