HTTPMOD / DUMMY Device / notify

Begonnen von fireball, 15 Dezember 2019, 14:48:15

Vorheriges Thema - Nächstes Thema

Beta-User

Wenn, dann musst du webCmd UND eventMap ändern...Dann kannst du auch dmdIcon ergänzen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

fireball

Hi Beta-User, ja, das ist klar. Das eine um im FHEM Web ne Anzeige zu haben und das andere als Mapping zu den sets..

ABER es geht einfach nicht. Mein Dummys sind so definiert, da funktioniert es... webCmd + eventMap .

Beim ReadingsProxy gehts nicht... sowie ich das Attribut webCmd einfüge kommt in in FHEM ein PopUP mit ner Fehlermeldung:
Unknown argument auf, choose one of 0 1 2

Siehe auch screenshot.

Ich verstehs nicht...

xenos1984

Bist du sicher, dass die Reihenfolge stimmt? In den Beispielen zu eventMap ist es umgekehrt:

eventMap 0:auf 1:zu 2:stop

fireball

#33
Hallo Xenos...

BOAHH DAS WAR DIE LÖSUNG!!!  Aber das kann nicht sein...

In meinem Dummys ist es umgekehrt und funktioniert so in allen Dummys.
Hier ein BSP:
Internals:
   FUUID      5dfcc192-f33f-0804-9e09-63234e2aee61ea4b
   NAME       Rollladen_EG_BAD
   NR         465
   STATE      100
   TYPE       dummy
   READINGS:
     2020-01-03 14:56:56   Link_im_HomeTouch wlss39
     2020-01-03 14:56:56   Name_im_HomeTouch Rollladen
     2020-01-03 14:56:56   OpenLevel       100
     2020-01-03 14:56:56   Raum_im_HomeTouch 04_Bad_Unten
     2020-01-03 14:56:56   state           stop
Attributes:
   alexaName  Rolladen
   alexaRoom  Badezimmer unten
   devStateIcon 100:fts_shutter_10 1\d.*:fts_shutter_90 2\d.*:fts_shutter_80 3\d.*:fts_shutter_70 4\d.*:fts_shutter_60 5\d.*:fts_shutter_50 6\d.*:fts_shutter_40 7\d.*:fts_shutter_30 8\d.*:fts_shutter_20 9\d.*:fts_shutter_10 \d.*:fts_shutter_100
   eventMap   auf:0 zu:1 stop:2
   genericDeviceType switch
   homebridgeMapping On=state,cmdOn=1,cmdOff=0
   icon       fts_shutter
   room       ALEXA,FENSTER_TÜREN
   setList    0 1 2
   stateFormat OpenLevel
   userReadings Name_im_HomeTouch {ReadingsVal("HomeTouch","Taster_WiserName-4",0)}, Link_im_HomeTouch {ReadingsVal("HomeTouch","Taster_WiserLink-4",0)}, Raum_im_HomeTouch {ReadingsVal("HomeTouch","Taster_WiserRoom-4",0)}, OpenLevel {ReadingsVal("HomeTouch","Taster_OpenLevel-4",0)},
   verbose    5
   webCmd     auf:zu:stop


In FHEM WIKI steht auch https://wiki.fhem.de/wiki/EventMap#Beispiele das ALT DURCH NEU ersetzt wird... also  Meine alten Werte sind auf, zu, stop und die neuen 0, 1, 2.

Und ich habe es wie gesagt so auch in allen Dummys bei mir...

Wieso das bei Readingsproxy umgekehrt ist.... das kann ja nur der Entwickler wissen!?

Jetzt probiere ich es weiter... wenn ich jetzt noch zwei Values in HTTPMOD übergeben kann, dann kann ich mein Script wieder rauswerfen... ERSTMAL DANKE für den "kuriose" Lösung.

VG
René


PS: ReadingsProxy generiert keine Events?! Im EventMonitor kann ich nichts finden, wenn ich auf "auf, zu oder stop" drücke... Damit ist meine Sequenze nicht mehr nutzbar... die bei Doppelklick ein Stop auslöst....

xenos1984

Ehrlich gesagt finde ich die Beschreibung "alt" und "neu" bei den Werten in der eventMap etwas irritierend. Hier ist mit "alt" gemeint, dass dies die originalen, unveränderten Werte in deiner "alten" Konfiguration sind, also 0,1,2 - so wie sie vom Gerät kommen. Denen willst du "neue" Namen geben und sie stattdessen auf,zu,stop nennen - also sind letztere "neu". Warum das beim Dummy auch umgekehrt funktioniert ist mir aber auch ein Rätsel.

Zum set via HTTPMOD: Mir ist nicht klar, wie du in deiner Definition auf eine Variable namens "$val2" kommst bzw. woher du die hast. In der Dokumentation konnte ich keine solche finden. Ich schätze, hier muss man entweder für jede Jalousie ein setXX definieren, oder Name der Jalousie und Wert gemeinsam übergeben und dann im HTTPMOD mit etwas Perl-Code wieder aufteilen.

Zu den Events bin ich überfragt. Allerdings setzt du ja hier im Gegensatz zum Dummy + Notify durch Anklicken nicht den Status des Device, sondern rufst mittels setFn direkt einen Skript auf. Wenn du nun auch noch ein Event oder eine andere Aktion auslösen willst, sollte die mit in die setFn. Im einfachsten Falle könntest du es mit setstate versuchen.

fireball

Hi Xenos...

ZitatZum set via HTTPMOD: Mir ist nicht klar, wie du in deiner Definition auf eine Variable namens "$val2" kommst bzw. woher du die hast. In der Dokumentation konnte ich keine solche finden. Ich schätze, hier muss man entweder für jede Jalousie ein setXX definieren, oder Name der Jalousie und Wert gemeinsam übergeben und dann im HTTPMOD mit etwas Perl-Code wieder aufteilen.

Das habe ich mir nur so ausgedacht, als Bsp, damit man sieht was ich will. In der Doku ist nur von einem val die Rede, da hast du recht.
Ja genau, das defnieren aller Jalousien wollte ich ja vermeiden. Es funktioniert auch... val kann ich auch in der URL setzen, dann habe ich aber keinen "val" mehr für 0 1 oder 2.

OK, dass scheint hier alles ziehmlich speziell zu sein... daher werde ich mal schauen, was noch so geht... aber für mich ist die Lösung mit den Dummys wahrscheinlich doch das beste...

Beta-User

Wieso? Das mit ReadingsProxy tut doch, oder?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

fireball

Hi Beta-User,

also also bei der Variante mit den Dummys habe ich nur einen Nachteil, ich habe nicht automatisch den Status der Jalousien als ICON.

Bei den ReadingsProxy habe ich dafür kein Event, daher funktioniert der Doppelklick für meine Sequenze nicht mehr und ich habe grad komische Phänomene, dass das Ding von alleine schaltet?! kA was da los ist.
Durch den fehlenden Doppelklick brauch ich dann ein weiteren Schalter im WebUI und muss das ganze Tablett UI erweitern...

Also im Großen und Ganzen, ist son ReadingsProxy ne feine Sache, ich werde das evtl. an einer anderen Stelle nutzen, ich glaube es wird mir hier nicht wirklich helfen... dazu kommt noch das unterschiedliche Verhalten des Attributes eventMap...

VG
René

Beta-User

Na ja, was du an code ausführst, ist deine Sache, ich würde hier vermeiden, auf die bash-Ebene zu gehen und das mit Perl zusammenbauen (ungetestet, kann sein, dass das wegen irgendwelcher Rechtethemen nicht (ohne weiteres) geht).
Damit sollten sich auch Doppelklicks detektieren lassen (z.B. über eine ReadingsAge-Abfrage am ReadingsProxy, in diese Richtung geht auch der Vorschlag von @xenos1984); nur eben "anders" als bisher via sequence oä..
Die Probleme kannst du nur finden, wenn du genauer hinschaust, was an Events kommt usw. und was an Verkehr zur Steuereinheit; würde aber tippen, dass das was anderes ist (ReadingsProxy hat afaik manchmal und nur den Nachteil, dass er keine Events erzeugt, das war jedenfalls mal im Zusammenhang mir MQTT_GENERIC_BRIDGE ein Thema; aber von so einem Eigenleben habe ich bisher noch nicht gehört); das "ungewöhnliche" event-Mapping (?) muß man ja nur einmal durchschaut haben.

Aber wie dem auch sei: Du mußt damit klarkommen, nicht wir (ich hätte nur eventuell ein attrTemplate im Hinterkopf, um anderen zukünftig zu helfen. Und da nutze ich in der Regel nur Code bzw. Module, die mich überzeugen und die ich auch (halbwegs) verstehe, und Dummy ist (für diese Zwecke) mMn. eine nicht überzeugende Notlösung (ich kenne aber zugegebenermaßen das Ziel-Device nicht, vielleicht ist es wirklich "so schräg", dass man Dummy braucht...)

Gruß, Beta-User

[OT] Sorry auch nochmal wegen des Einwurfs bzgl. MQTT/MQTT2_DEVICE. Aus eigener Erfahrung weiß ich halt, dass man da "alles mögliche" zusammenschustern kann und in der Regel unmittelbare Rückmeldung bekommt, was auf der Hardware-Seite passiert.
Wollte dich nicht frustrieren, es ist schon klar, dass in dem, was du jetzt hast und auch hattest, als du den Thread aufgemacht hattes, schon unglaublich viel "Gehirnschmalz" steckt...
Das verdient volle Anerkennung!

(geht mir übrigens manchmal auch so, dass ich den wahren Wert mancher Vorschläge erst später erkenne, genauso, wenn ich auf dem Holzweg bin...)
[/OT]
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

fireball

Hi Beta-User,

danke für die Blumen... ich würde ja gern für alle die die sich einen HomeTouch kaufen und damit Ihre Hausautomatisierung aufbauen auch eine FHEM Integration anbieten... ich denke ich habe schon eine Menge Grundlagen gesammelt.
Ich bin auch in Kontakt mit Merten, aber die Rücken leider nicht mit der API so richtig raus und ich habe jetzt alles selber zusammen getragen.
https://www.merten.de/produkte/home-touch.html

Ich würde gern  ja auch gern mit so wenig wie möglich Komponenten auskommen und mit den optimalen FHEM Devices arbeiten.

Ich habe gerade noch eine andere Idee...

Jetzt sieht mein ReadingsProxy so aus:
Internals:
   DEF        HomeTouch:Taster_OpenLevel-12
   DEVICE     HomeTouch
   FUUID      5e0cba1b-f33f-0804-cf9d-a82b4f824e1be46c
   NAME       Rollladen_EG_WZ_Terasse
   NOTIFYDEV  global,HomeTouch
   NR         523
   NTFY_ORDER 50-Rollladen_EG_WZ_Terasse
   READING    Taster_OpenLevel-12
   STATE      auf
   TYPE       readingsProxy
   CONTENT:
     HomeTouch  1
   READINGS:
     2020-01-03 20:01:12   Link_im_HomeTouch wlss97
     2020-01-03 20:01:12   Name_im_HomeTouch Terrasse
     2020-01-03 20:01:12   Raum_im_HomeTouch 17_WZ
     2020-01-03 19:57:48   lastCmd         1
     2020-01-03 20:01:12   state           0
Attributes:
   devStateIcon 100:fts_shutter_10 1\d.*:fts_shutter_90 2\d.*:fts_shutter_80 3\d.*:fts_shutter_70 4\d.*:fts_shutter_60 5\d.*:fts_shutter_50 6\d.*:fts_shutter_40 7\d.*:fts_shutter_30 8\d.*:fts_shutter_20 9\d.*:fts_shutter_10 \d.*:fts_shutter_100
   eventMap   0:auf 1:zu 2:stop
   genericDeviceType switch
   homebridgeMapping On=state,cmdOn=1,cmdOff=0
   icon       fts_shutter
   room       FENSTER_TÜREN
setFn      {my $Jalousie=ReadingsVal("HomeTouch","Taster_WiserLink-12",0);; fhem("
attr HomeTouch set03URL http://192.168.178.128/ocf/$Jalousie/shutter/1; save;
set HomeTouch Taster $CMD;")}
   setList    0 1 2
   userReadings Name_im_HomeTouch {ReadingsVal("HomeTouch","Taster_WiserName-12",0)}, Link_im_HomeTouch {ReadingsVal("HomeTouch","Taster_WiserLink-12",0)}, Raum_im_HomeTouch {ReadingsVal("HomeTouch","Taster_WiserRoom-12",0)}
   verbose    5
   webCmd     auf:zu:stop


setFn      {my $Jalousie=ReadingsVal("HomeTouch","Taster_WiserLink-12",0);; fhem("
attr HomeTouch set03URL http://192.168.178.128/ocf/$Jalousie/shutter/1; save;
set HomeTouch Taster $CMD;")}


Das geht auch... ich kann so mein Bash-Script wegwerfen und den HTTPMOD direkt steuern (aber nur mit einem setURL für alle Taster)

Das Problem ist jetzt, das ich mit attr eine Änderung mache, die ich speichern muss. An einer anderen Stelle habe ich das mit save lösen können, aber jetzt funktioniert es zwar, aber das rote Fragezeichen geht nicht weg...

Weiterhin kann ich über den Weg bestimmt das Event von HTTPMOD abfangen und mein Sequenz wieder nutzen...

2020-01-03 20:04:58 Global global ATTR HomeTouch set03URL http://192.168.178.128/ocf/wlss97/shutter/1
[b]2020-01-03 20:04:58 HTTPMOD HomeTouch Taster 0
[/b]2020-01-03 20:04:59 Global global ATTR HomeTouch set03URL http://192.168.178.128/ocf/wlss97/shutter/1
2020-01-03 20:04:59 HTTPMOD HomeTouch Taster 1
2020-01-03 20:05:03 PRESENCE Handy_Rene present
2020-01-03 20:05:03 PRESENCE Handy_Rene presence: present
2020-01-03 20:05:06 Global global ATTR HomeTouch set03URL http://192.168.178.128/ocf/wlss97/shutter/1
[b]2020-01-03 20:05:06 HTTPMOD HomeTouch Taster 1
[/b]2020-01-03 20:05:07 ESPEasy ESPEasy_WEMOS_FLUR_EG_PIR presence: absent
2020-01-03 20:05:09 PRESENCE Handy_Ara absent
2020-01-03 20:05:09 PRESENCE Handy_Ara presence: absent
2020-01-03 20:05:11 PRESENCE Handy_Rene present
2020-01-03 20:05:11 PRESENCE Handy_Rene presence: present
2020-01-03 20:05:13 Global global ATTR HomeTouch set03URL http://192.168.178.128/ocf/wlss97/shutter/1
[b]2020-01-03 20:05:13 HTTPMOD HomeTouch Taster 0
[/b]2020-01-03 20:05:15 Global global ATTR HomeTouch set03URL http://192.168.178.128/ocf/wlss97/shutter/1
[b]2020-01-03 20:05:16 HTTPMOD HomeTouch Taster 2
[/b]


Leider bekomme ich aus dem HTTPMOD Fred noch keine Antwort, ob man zwei Paramter übergeben kann, aber ich setze jetzt einfach das Attribut set03URL einfach dynamisch mit dem Wert der entsprechenden Jalousie und dann kann ich ja den AUF AB STOP Wert übergeben.

Nur das rote Fragezeichen ist noch ein Problem und eben ging die eine TestJalousie schon wieder von alleine....

VG
René

Beta-User

Hmm, irgendwo hatte xenos1084 die Tage (in einem anderen Thread) eine Lösung gepostet, wie man mit Variablen die URL anpassen kann; kann nicht sagen, ob das auch im Kontext setUrl funktioniert, aber dann ginge es ohne Config-Änderung, wenn man den Wert in ein Reading (am HTTPMOD) packt und dort dynamisch ausliest.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

fireball

das war hier, hab die Seite noch offen...
https://forum.fhem.de/index.php/topic,106953.msg1008007.html#msg1008007

define mydevice HTTPMOD %%URL%% 3600
attr mydevice replacement01Mode expression
attr mydevice replacement01Regex %%URL%%
attr mydevice replacement01Value ReadingsVal("mydummy", "myreading", "")


Muss ich mal probieren...

xenos1984

Ja, die gleiche Lösung sollte auch für eine setURL funktionieren. Dann braucht man kein Attribut dynamisch ändern, sondern nur ein Reading auslesen.