FHEM Forum

Verschiedenes => Bastelecke => ESP Familie => Thema gestartet von: Damian am 20 Januar 2020, 21:27:49

Titel: espeasy Dummy Values setzen
Beitrag von: Damian am 20 Januar 2020, 21:27:49
Hallo zusammen,

ich habe esp Easy Mega letzte Version vom Dezember: 20104 - Mega installiert.

Nun habe ich ein OLED-Display dran gehängt, welches funktioniert. Das soll mal testweise die aktuelle Temperatur und Feuchte über ein ESP-Dummy darstellen.

Dazu habe ich in ESPEasy Generic-Dummy Device namens "dummy" angelegt. Dort habe ich zwei Values: temperature und humidity angelegt.

Soweit so gut, das Device wird in FHEM mit den entsprechenden Readings dargestellt. Was nicht funktionieren mag, ist das Setzen der Werte per set Kommando.

Hier das List vom ESP-Device:

ZitatInternals:
   CFGFN     
   DEF        192.168.178.23 80 espBridge ESP_Test_dummy
   ESP_BUILD  20104
   ESP_BUILD_GIT mega-20191208
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 2
   FUUID      5e260904-f33f-c0d4-ff03-7d346196a51caded
   HOST       192.168.178.23
   IDENT      ESP_Test_dummy
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MAX_CMD_DURATION 1
   MSGCNT     8
   NAME       ESPEasy_ESP_Test_dummy
   NOTIFYDEV  global
   NR         6971
   NTFY_ORDER 50-ESPEasy_ESP_Test_dummy
   PORT       80
   STATE      hum: 0.00 tem: 0.00
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    2.18
   espBridge_MSGCNT 8
   espBridge_TIME 2020-01-20 21:16:40
   READINGS:
     2020-01-20 21:16:40   humidity        0.00
     2020-01-20 21:14:43   presence        present
     2020-01-20 21:16:40   state           hum: 0.00 tem: 0.00
     2020-01-20 21:16:40   temperature     0.00
   helper:
     fpc        1579550980
     pm:
       Encode     1
       JSON       1
     received:
       humidity   1579551400
       temperature 1579551400
   sec:
     admpwd     
Attributes:
   IODev      espBridge
   Interval   300
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3

Der Set-Befehl sieht dann so aus:

set ESPEasy_ESP_Test_dummy taskvalueset 2 1 10

Nach meinem Verständnis sollte jetzt in Task 2 (mein dummy-Device in ESP) auf die erste Variable (temperature) der Wert 10 geschrieben werden - macht er aber nicht.

Muss ich da noch etwas beachten?

Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 21 Januar 2020, 16:20:14
Zitat von: Damian am 20 Januar 2020, 21:27:49
Was nicht funktionieren mag, ist das Setzen der Werte per set Kommando.
Ob es der richtige Weg ist kann ich Dir nicht sagen, da ich nie mit dummies/taskvalueset experimentiert habe. Funktioniert das Kommando denn, so wie Du es erwartest, wenn Du es in der ESP Easy Web GUI oder seriell eingibst?

Im Log (verbose 4/5) findest sich auch kein Hinweis, dass etwas schief läuft?
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Damian am 21 Januar 2020, 21:44:32
Im log erscheint:

Zitat2020.01.21 21:25:05 3: ESPEasy ESPEasy_ESP_Test_dummy: set ESPEasy_ESP_Test_dummy taskvalueset 2 1 10
2020.01.21 21:25:05 5: ESPEasy ESPEasy_ESP_Test_dummy: set ESPEasy_ESP_Test_dummy taskvalueset 2 1 10 (mappings done)
2020.01.21 21:25:05 5: ESPEasy ESPEasy_ESP_Test_dummy: IOWrite ( $defs{ESPEasy_ESP_Test_dummy}, $defs{ESPEasy_ESP_Test_dummy}, taskvalueset, ("2","1","10") )

Fehlermeldungen sind nicht dabei.

Das scheint hier zu funktionieren:

https://forum.fhem.de/index.php/topic,92150.msg846668.html#msg846668

Evtl. muss ich noch Rule Definieren für das Setzen des Value in ESP.

Hier wurde es so ähnlich gelöst:

https://mwinkler.jimdo.com/smarthome/aktoren-sensoren/nachtspeicher/

Definitionen im ESP habe ich angehängt.


Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 22 Januar 2020, 15:53:41
Wenn keine Fehlermeldungen im Log auftauchen (auch von der Bridge nicht), dann bin ich vermutlich raus. Bei den ESP Easy Regeln und Definitionen kann ich Dir nicht helfen, da ich zur Zeit nicht im Thema bin. Dann besser im Letscontrolit Forum oder auf Github nachfragen, wenn hier keine hilfreiche Antwort von anderen Anwendern kommen sollte...

Leider hast Du noch beantwortet, ob der Befehl via GUI/Seriell funktioniert. Wenn ja, dann harmoniert das ESPEasy Modul nocht nicht mit den aktuellen ESP Easy Versionen. Falls nicht, dann scheidet das ESPEasy Modul als Fehlerquelle erst einmal aus.
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Wernieman am 22 Januar 2020, 16:21:44
Wie schon gesagt:
probiere mal das setzen innerhalb von ESPEasy. Kann aktuell nicht bei mir nachsehen, sollte aber funktionieren. Wenn das geht (also das setzen innerhalb der Weboberfläche von ESPEasy), mal probieren per Web-Schnitstelle (also per wget von einem anderen Rechner). Wenn das geht, dann erst liegt es am Modul ..
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Damian am 22 Januar 2020, 18:47:42
So, ich habe jetzt Folgendes mit Erfolg ausprobiert:

http://<esp-ip>/control?cmd=TaskValueSet,2,1,10

Der Dummy im ESP wird gesetzt und im OLED sauber angezeigt.
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 23 Januar 2020, 16:56:24
Das aktuelle ESPEasy Modul ruft nicht die von Dir gepostete url auf, sondern:
http://<esp-ip>:80/?cmd=taskvalueset,2,1,10
Das sieht man auch, wenn man die Bridge auf verbose 4 stellt.

Wenn ich Deine url verwende, dann liefert meine Test-ESP-Easy Firmware (v1.47) folgendes zurück:
Unknown or restricted command
Eine ältere 2.x Mega Version verhält sich ebenso.

Es scheint sich wohl etwas an aktuellen ESP Easy Firmware Versionen geändert zu haben.
Wenn ich wüßte welche Befehle betroffen sind und vor allem ab welcher ESP Easy Version, dann könnte ich das schnell im Modul anpassen.

Wenn Du magst, dann könntest Du im Modul die URL mal kurz anpassen. Dazu müßtest Du nur im Hash %ee_sets die Variable "$d_urlSys" durch "$d_urlPlg" für den Key "taskvalueset/url" ersetzen. Dann wüßten wir zumindest, dass es wirklich daran liegt...
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 24 Januar 2020, 06:16:25
Wenn das Problem wirklich an der aufgerufenen URL liegt, dann kann man die URL auch via userSetCmds Attribut überschreiben:

attr ESPEasy_ESP_Test_dummy userSetCmds ( taskvalueset => { args => 3, url => "/control?cmd=", usage => "<task nr> <value nr> <value>" } )


Nebenbei: in älteren ESP Easy Firmware Versionen konnte man ein Admin Passwort setzen. Wenn dieses Passwort gesetzt war, dann konnten einige interne Befehle (wie TaskValueSet, deepsleep, taskrun, etc.) nur ausgeführt werden, wenn die aufrufende IP Adresse sich vorher mit dem Passwort angemeldet hat. Das ist im Modul soweit auch berücksichtig. In neueren ESP Easy Versionen soll es nun zusätzlich(?) einen basic auth Mechanismus geben. Das habe ich mir aber noch nicht angesehen... Was ich sagen will: Wenn Du ein Passwort gesetzt haben solltest, dann versuch es mal bitte auch ohne.
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Wernieman am 24 Januar 2020, 08:31:35
Zitatzusätzlich(?)
Nein .. das hat das alte ersetzt. Also der alte Login wurde durch basic-Auth ersetzt. Wenn kein Auth geswrzt, verhalten sich (meines Wissens) die beiden Versionen gleich.

Allerdings ist mein Wissen darüber irgendwann im Herbst letzten Jahres "stehengeblieben" ...
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Damian am 24 Januar 2020, 17:07:56
Ich habe zum Testen das Admin-Passwort gelöscht - gleiches Verhalten (Browser geht, esp-Modul geht nicht)

ob :

http://192.168.178.23/control?cmd=TaskValueSet,2,1,15

oder

http://192.168.178.23:80/control?cmd=TaskValueSet,2,1,15

beides funktioniert über den Browser.

Ich kann mir erst mal mit:

::GetHttpFile('192.168.178.23/',"control?cmd=TaskValueSet,2,1,15")

behelfen.

Edit:

http://192.168.178.23/?cmd=TaskValueSet,2,1,25

geht auch, aber damit wird die Benutzeroberfläche aufgerufen, und nicht OK zurück gemeldet, wie mit 'control'

hiernach: https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference

gehört 'control' zum HTTP-Kommando
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 25 Januar 2020, 06:42:44
Funktioniert der Aufruf denn über das Modul, wenn Du og. userSetCmds Attribut setzt?
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Damian am 25 Januar 2020, 11:10:46
Auch mit gesetztem Attribut 'userSetCmds' funktioniert es bei mir nicht:

list vom ESP-Device:

Internals:
   CFGFN     
   DEF        192.168.178.23 80 espBridge ESP_Test_dummy
   ESP_BUILD  20104
   ESP_BUILD_GIT mega-20191208
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 2
   FUUID      5e260904-f33f-c0d4-ff03-7d346196a51caded
   HOST       192.168.178.23
   IDENT      ESP_Test_dummy
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MAX_CMD_DURATION 1
   MSGCNT     1139
   NAME       ESPEasy_ESP_Test_dummy
   NOTIFYDEV  global
   NR         6971
   NTFY_ORDER 50-ESPEasy_ESP_Test_dummy
   PORT       80
   STATE      tem: 10
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    2.18
   espBridge_MSGCNT 1139
   espBridge_TIME 2020-01-25 11:05:23
   READINGS:
     2020-01-24 23:26:05   humidity        0.00
     2020-01-25 11:05:19   presence        present
     2020-01-25 11:05:23   state           tem: 10
     2020-01-25 11:05:23   temperature     10
   helper:
     fpc        1579550980
     pm:
       Encode     1
       JSON       1
     received:
       temperature 1579946723
   sec:
     admpwd     
Attributes:
   IODev      espBridge
   Interval   300
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3
   userSetCmds ( taskvalueset => { args => 3, url => "/control?cmd=", usage => "<task nr> <value nr> <value>" } )
   verbose    5



Logausgaben mit Verbose 4 bei der Bridge:

Zitat2020.01.25 11:03:18 3: ESPEasy ESPEasy_ESP_Test_dummy: set ESPEasy_ESP_Test_dummy taskvalueset 2 1 20
2020.01.25 11:03:18 5: ESPEasy ESPEasy_ESP_Test_dummy: set ESPEasy_ESP_Test_dummy taskvalueset 2 1 20 (mappings done)
2020.01.25 11:03:18 5: ESPEasy ESPEasy_ESP_Test_dummy: IOWrite ( $defs{ESPEasy_ESP_Test_dummy}, $defs{ESPEasy_ESP_Test_dummy}, taskvalueset, ("2","1","20") )
2020.01.25 11:03:18 4: ESPEasy espBridge: Queuing: 192.168.178.23 ESP_Test_dummy cmd:'taskvalueset 2,1,20' queueSize:17 reason:deepsleep
2020.01.25 11:03:23 4: Connection accepted from espBridge_192.168.178.23_57154
2020.01.25 11:03:23 4: ESPEasy espBridge_192.168.178.23_57154: Peer address 192.168.178.23 accepted
2020.01.25 11:03:23 4: ESPEasy espBridge_192.168.178.23_57154: No basic authentication required
2020.01.25 11:03:23 4: ESPEasy espBridge_192.168.178.23_57154: Send http close '200 OK'
2020.01.25 11:03:23 4: ESPEasy espBridge_192.168.178.23_57154: Src:'ESP_Test'/'dummy' => ident:ESP_Test_dummy dev:ESPEasy_ESP_Test_dummy combinedDevice:0
2020.01.25 11:03:23 5: ESPEasy ESPEasy_ESP_Test_dummy: Received: ESP_Test_dummy::192.168.178.23::1::0::1::i||unit||0||0|||i||sleep||0||0|||i||build||20104||0|||i||build_git||mega-20191208||0|||i||build_notes|| - Mega||0|||i||version||2||0|||i||node_type_id||17||0|||r||temperature||10||1
2020.01.25 11:03:23 4: ESPEasy ESPEasy_ESP_Test_dummy: temperature: 10
2020.01.25 11:03:23 5: ESPEasy ESPEasy_ESP_Test_dummy: Internals: unit:0 sleep:0 build:20104 build_git:mega-20191208 build_notes: - Mega version:2 node_type_id:ESP Easy Mega
2020.01.25 11:03:23 4: ESPEasy espBridge_192.168.178.23_57154: Closing tcp session.
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: lambi am 25 Januar 2020, 16:33:26
Ich habe letztes Jahr mich auch gewundert, dass das taskvalueset plötzlich nicht mehr funktioniert hat. Vermutlich gab es eine Änderung im ESPEasy: Mit dem Update auf die Version vom 16.04.2019 ging es bei jedenfalls mir nicht mehr. Als Lösung habe ich so wie Du für die Stellen mit taskvalueset auf "GetHttpFile" umgestellt.

Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 26 Januar 2020, 07:18:12
Zitat
2020.01.25 11:03:18 4: ESPEasy espBridge: Queuing: 192.168.178.23 ESP_Test_dummy cmd:'taskvalueset 2,1,20' queueSize:17 reason:deepsleep
...
2020.01.25 11:03:23 5: ESPEasy ESPEasy_ESP_Test_dummy: Internals: unit:0 sleep:0
...
2020.01.25 11:03:23 4: ESPEasy espBridge_192.168.178.23_57154: Closing tcp session.

Laut der ersten Logzeile befindet sich der ESP im DeepSleep und es warten 17 Befehle darauf, dass er aufwacht. Nach der letzten gezeigten Logzeile (closing tcp session) sollte dann eigentlich das Senden der aufgelaufenen Befehle (default: 1 Sekunde lang) starten.

Laut gezeigtem List ganz oben und der zweiten Logzeile wurde aber kein DeepSleep erkannt. Verwirrend. Hasttest Du zwischenzeitlich den DeepSleep aktiviert?
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: Damian am 26 Januar 2020, 10:28:17
Zitat von: dev0 am 26 Januar 2020, 07:18:12
Verwirrend. Hasttest Du zwischenzeitlich den DeepSleep aktiviert?

Nein
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 26 Januar 2020, 11:10:44
Meines Wissens nach funktioniert die letzte stable ESP Easy v2 Version (https://github.com/letscontrolit/ESPEasy/tree/v2.0) mit dem Modul so wie es soll und mein Rat ist auch diese Version einzusetzten, solange man auf keines der neuen Features angewiesen ist, die seit dem Release dazugekommen sind. Wenn ein neues stable ESP Easy Release erscheint, dann werde ich das Modul daran anpassen.

Wenn sich zwischenzeitlich in den Pre-Releases Funktionen, URLs oder sonst etwas ändert, dann würde ich das auch ins Modul einbauen, wenn ich entsprechend unterstützt werde und nicht selbst alles aus dem Quellcode und/oder via "trial and error" heraus finden muss.
Titel: Antw:espeasy Dummy Values setzen
Beitrag von: dev0 am 26 Januar 2020, 12:01:50
Vielleicht sollte man auch darüber nachdenken, ob das ESPEasy Modul überhaupt noch sinnvoll ist, da die MQTT(2) Anbindung sich in FHEM extrem weiter entwickelt hat und sehr flexibel ist. Und ob man mit entsprechenden Attr.Templates nicht besser fährt. Nur so ein Gedanke am Rande...