espeasy Dummy Values setzen

Begonnen von Damian, 20 Januar 2020, 21:27:49

Vorheriges Thema - Nächstes Thema

Damian

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?

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dev0

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?

Damian

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.


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dev0

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.

Wernieman

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 ..
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Damian

#5
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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dev0

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

dev0

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.

Wernieman

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" ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Damian

#9
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dev0

Funktioniert der Aufruf denn über das Modul, wenn Du og. userSetCmds Attribut setzt?

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

lambi

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.


dev0

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?

Damian

Zitat von: dev0 am 26 Januar 2020, 07:18:12
Verwirrend. Hasttest Du zwischenzeitlich den DeepSleep aktiviert?

Nein
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF