Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

Pumba9876

Ja habe ich es fehlen aber noch weitere Module Webview mqtt_device, und noch ein paar andere.
Gibt es eigentlich irgendwo ein Aufstellung welche Perl Befehle ausführt werden müssen das Fhem ohne meckern funktioniert .
Habe im Netz viele Seiten besucht zur fhem Einrichtung der ein schreibt so der andere so und auf fhem.de habe ich nirgends etwas gefunden. Kann mir da bitte einer etwas auf die Sprünge helfen. Bin ein Laie in den Sachen, bin am Ende nach 10h images erstellen und herum probieren. Wäre schön wenn mir geholfen wird. 
Danke  >:( :'(
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

amenomade

#1036
Wenn Du ein fhem "update" gemacht hast, sollte das Modul Utils.pm in ./lib/FHEM/HTTPMOD gelandet sein, und Du solltest diese Fehlermeldung nicht haben.

Wenn Module spezifische Perl Sachen brauchen, ist es in der Regel entweder in der Log oder in CommandRef erwähnt.

Was ergibt dann in fhem ein "update check"?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Pumba9876

#1037

Downloading https://fhem.de/fhemupdate/controls_fhem.txt fhem Got remote controls_fhem.txt with 2373 entries. Got local controls_fhem.txt with 2372 entries. List of new / modified files since last update: UPD ./CHANGED UPD ./MAINTAINER.txt UPD FHEM/10_CUL_HM.pm UPD FHEM/36_Shelly.pm UPD FHEM/36_ShellyMonitor.pm UPD FHEM/57_Calendar.pm UPD FHEM/71_YAMAHA_MC.pm UPD FHEM/98_HMinfo.pm UPD FHEM/lib/AttrTemplate/general_use.template New entries in the CHANGED file: - bugfix: 57_Calendar: correct event selection for limit:when=tomorrow (forum #97810) - feature: 36_ShellyModule: new module to interwork with 36_Shelly Downloading https://raw.githubusercontent.com/uniqueck/fhem-abfall/master/controls_fhemabfall.txt fhemabfall Got remote controls_fhemabfall.txt with 6 entries. List of new / modified files since last update: UPD FHEM/ABFALL_getEvents.pm UPD FHEM/ABFALL_setUpdate.pm UPD FHEM/57_ABFALL.pm New entries in the CHANGED file: FHEM ABFALL and more last change: 2018-06-13 - update because of calendar api changed

nach Update check
1x FB7590 1x RPI3B 4xShelly 2.5 2x Shelly1Philips Hue ,Teufel Soundbar ,Ones, foscam Kamera

amenomade

Dann hast Du vermutlich ein anderes Problem. Mach lieber ein neues Thread, und poste dort ein "ls -la /opt/fhem/FHEM" und die Log beim start von Fhem.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

#1039
Zitat von: StefanStrobel am 16 Januar 2021, 16:45:58
Und hier gleich noch ein neues Feature:

attr MeinHTTPMOD setXXFollowGet GetName

sorgt dafür, dass nach einem set automatisch ein get ausgeführt wird, um bei Bedarf die Readings zu aktualisieren.
Der Wert nach dem Attribut muss dazu dem Namen eines definierten get entsprechen.
Hallo Stefan,
vielen Dank für diese Erweiterung, es läuft bei mir bereits und hilft mir sehr im besseren Timing bei der Wechselrichter Abfrage.
Das gleiche dann bitte auch noch bei den Get Attributen und ich kann schön die verschiedenen Abfragen verketten, was jedoch bei falscher Anwendung die Gefahr eines Loops mit sich bringt.
Um das zu bremsen könnte es dann ein weiteres Attribut mit der maximalen Anzahl von getXXFollowGet , über alle Aufrufe gezählt,  geben. Default wäre natürlich 1 .
VG
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Kein Problem.
Ich hoffe nur dass das Feature nicht zu vielen Problemen führt ...

Die Attribute sind: setXXFollowGet / getXXFollowGet sowie maxGetChain (Default 10).
Doku muss ich noch schreiben. Wenn ich das habe und es in den nächsten Tagen keine Problemmeldungen gibt, checke ich es ein.

Gruss
   Stefan

ch.eick

#1041
Zitat von: StefanStrobel am 19 Januar 2021, 17:14:31
Ich hoffe nur dass das Feature nicht zu vielen Problemen führt ...

Die Attribute sind: setXXFollowGet / getXXFollowGet sowie maxGetChain (Default 10).
Doku muss ich noch schreiben. Wenn ich das habe und es in den nächsten Tagen keine Problemmeldungen gibt, checke ich es ein.
Wow, bist Du schnell :-)
Lass mir bitte etwas Zeit zum Testen, ich könnte es morgen eventuell mal einbauen.

Mit setXXFollowGet habe ich bisher keine Probleme, es ist sogar eine Optimierung, da es keine feste Verzögerung, wie ich es bisher eingestellt hatte, mehr habe.
Auch die Anzahle für den neuen Aufruf des Devices verringert sich und somit der Overhead im FHEM. Wenn das HTTPMOD einmal läuft, macht es jetzt direkt mehrere Abfragen in einem Rutsch.

Ich habe nicht alles verfolgt, kann ich Deine Module auch mit einem wget abrufen?

VG Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo,

ich habe den neuen Stand gerade eingecheckt.
Zwischenversionen lege ich bisher nicht auf einem Server ab, sondern poste sie nur hier im Forum. Daher geht das leider mit wget nicht.

Gruss
   Stefan

beaune

Hallo,

ich hab ein paar Tage rumprobiert, aber an einer Stelle hab ich noch ein Verständnisproblem. Was ich erreichen möchte:

Ich möchte von einer Website per JSON API Parameter lesen und schreiben. Dazu habe ich entsprechende Readings angelegt und als readingXXJSON die entsprechenden Tags angegeben. Zusätzlich habe ich ein get-Attribut angegeben, so dass ich das Lesen der Werte auf der fhem-Weboberfläche initiieren kann. Das funktioniert soweit ganz gut, die Werte kommen in den Readings an. Komisch ist zwar, dass der Get-Button in der Weboberfläche irgendwie "klemmen" bleibt, aber ansonsten funktioniert alles.

Wenn ich nun dieselben Parameter auch schreiben möchte, wirds schwieriger. Die Website verlangt hier PUT. Dementsprechend habe ich für die Parameter jeweils put-Attribute definiert, zum einen für die Angabe der Methode mit setXXMethod, und zum anderen die Daten mit setxxData. Auch das funktioniert, die Daten kommen an und bewirken was sie sollen. Nur die korrespondierenden fhem-Readings merken davon nichta uns haben noch den alten Wert. Wie krieg ich das denn hin, dass die upgedated werden? Muß ich dafür selbst notifies schreiben oder geht das geschickter?

Ich füge zum besseren Verständnis mal meine Definition ein:
defmod testairplay4 HTTPMOD http://192.168.2.52:3689/api/outputs/162420883472 0
attr testairplay4 userattr get01Name reading01JSON reading01Name reading01OMap reading02JSON reading02Name set01Data set01IMap set01Method:GET,POST,PUT set01Name set01TextArg:0,1 set02Data set02Max set02Method:GET,POST,PUT set02Min set02Name set02ParseResponse:0,1 setMethod:GET,POST,PUT
attr testairplay4 enableControlSet 1
attr testairplay4 enableCookies 1
attr testairplay4 enforceGoodReadingNames 1
attr testairplay4 extractAllJSON 0
attr testairplay4 get01Name GetValues
attr testairplay4 handleRedirects 1
attr testairplay4 reading01JSON selected
attr testairplay4 reading01Name Selected
attr testairplay4 reading01OMap 0:off, 1:on
attr testairplay4 reading02JSON volume
attr testairplay4 reading02Name Volume
attr testairplay4 set01Data {"selected": $val}
attr testairplay4 set01IMap false:off, true:on
attr testairplay4 set01Method PUT
attr testairplay4 set01Name SetSelected
attr testairplay4 set01TextArg 1
attr testairplay4 set02Data {"volume": $val}
attr testairplay4 set02Max 100
attr testairplay4 set02Method PUT
attr testairplay4 set02Min 0
attr testairplay4 set02Name SetVolume
attr testairplay4 setMethod PUT
attr testairplay4 stateFormat {sprintf("Status: %s, Lautstärke: %d", ReadingsVal($name,"Selected","off"), ReadingsVal($name,"Volume",0))}


Hat jemand nen Tipp für mich?



StefanStrobel

Hallo,

die neueste Version hat ein neues Attribut, mit dem man nach einem Set automatisch ein Get initiieren kann. Genau für solche Zwecke. Das habe ich ein paar Posts weiter oben beschrieben.

Gruß
    Stefan

beaune

Hi,

super, vielen Dank! Hab ich gleich probiert, und tut auch. Irgendwas stimmt bei mir dennoch nicht: die Werte der readings sind zwar aktualisiert, ich muß aber trotzdem ein manuelles refresh des Browsers anstoßen, damit ich die neuen Werte auch sehe. Hast Du da ne Idee?

Und nochmal rein zum Verständnis der Idee für mich: Ich hatte verstanden, dass immer die Zahl den Zusammenhang zwischen z.B. Reading und Get-Funktion herstellt. Da ist es ja auch so. Bei set01FollowGet muß man als Parameter aber nochmal explizit den Namen der Get-Funktion angeben, wo ich eigentlich ein Boolean bzw. eine 1 erwartet hätte um auszudrücken, dass die mit den get01-Attributen beschriebene Funktion ausgeführt werden soll. Wie gesagt, kann man so machen, ist für mich so nur unerwartet. Aber vielleicht hab ich irgendwas ja auch noch nicht richtig verstanden...

Gruß
Beaune

ch.eick

Zitat von: beaune am 02 Februar 2021, 09:02:28
Und nochmal rein zum Verständnis der Idee für mich: Ich hatte verstanden, dass immer die Zahl den Zusammenhang zwischen z.B. Reading und Get-Funktion herstellt. Da ist es ja auch so. Bei set01FollowGet muß man als Parameter aber nochmal explizit den Namen der Get-Funktion angeben, wo ich eigentlich ein Boolean bzw. eine 1 erwartet hätte um auszudrücken, dass die mit den get01-Attributen beschriebene Funktion ausgeführt werden soll. Wie gesagt, kann man so machen, ist für mich so nur unerwartet. Aber vielleicht hab ich irgendwas ja auch noch nicht richtig verstanden...
Hallo Beaune,

das set01FollowGet kann einen beliebigen get Aufruf beinhalten und dort dann den Namen, nicht die Nummer.
Stefan hat auch noch ein get01FollowGet eingebaut, mit dem man dann eine Kette von get Aufrufen durchlaufen kann, aber Vorsicht, es könnte zu einem Loop kommen, der dann durch mit maxGetChain limitiert wird.

Zitat
Die Attribute sind: setXXFollowGet / getXXFollowGet sowie maxGetChain (Default 10).

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

StefanStrobel

Hallo,

ein set01FollowGet 01 um per Zahl auf die Get-Nummer zu verweisen wäre auch eine Variante gewesen.
So wie ich es jetzt gemacht habe, war es einfacher, da ich nur die getFn so aufrufe wie bei einem Befehl des Anwenders.
Vielleicht baue ich das mit der Nummer noch zusätzlich ein, damit es konsistenter ist :-)

Gruss
    Stefan

StefanStrobel

Hallo zusammen,

das Thema decoding / encoding von Zeichensätzen macht ja immer wieder Probleme.
Ich habe jetzt nochmal versucht, den Default-Wert für readingXYEncode zu optimieren.

Die Problematik ist ja die:
Falls ein Server / Gerät seine HTTP-Response als utf-8 (oder etwas anderes) kodiert sendet und der Response-Body nicht passend dekodiert wird, sollten die Readings nicht nochmal utf-8 encoded werden. Sonst werden statt Umlauten ggf. zwei seltsame Sonderzeichen dargestellt.
Falls aber bodyDecode gesetzt ist und die Response in das Perl-interne Format dekodiert wurde, dann ist ein encode utf-8 für die Readings sinnvoll. In der Regel möchte man die Readings ja im Browser vernünftig lesen können.
Falls die Response ohne charset-Header gesendet wird, dann kann man nur raten und jede Aktion kann falsch sein.

In jedem Fall gilt:
wer Probleme vermeiden möchte, sollte bodyDecode ebenso wie readingXYEncode (oder readingEncode für alle Readings) explizit so setzen, wie es für den eigenen Anwendungsfall passt.
In der meisten Fällen ist bodyDecode auto sinnvoll, nur der JSON-Parser kommt damit wohl nicht klar und möchte undekodiertes utf-8 haben.

Per Default ist bodyDecode inaktiv (sonst gab es beim Parsen immer wieder Probleme).
Per Default wird ein Reading utf-8 encoded, wenn der Response-Body mir bodyDecode dekodiert wurde oder wenn kein charset im Header stand.

Wenn das so keine Probleme macht, würde ich die angehängte neue Version demnächst einchecken.

Gruss
   Stefan

beaune

Mal ne andere Frage zu HTTPMOD:

Ich würde gerne ein set definieren, dass kein HTTP-Telegramm aussendet, sondern lediglich ein lokales Reading setzt. Hört sich für HTTPMOD irgendwie unlogisch an, ich weiß, aber wenn ein Device mehrere Webcommands hat und man möchte zusätzlich noch was lokales definieren, kann das schon Sinn machen, weil dann alle Kommandos als WebCmd verfügbar kompakt sind.

In der fhem Referenz hab ich dazu gefunden:
Zitatset[0-9]*Local
defines that no HTTP request will be sent. Instead the value is directly set as a reading value.

Das scheint aber gar nicht implementiert zu sein, oder ich verstehe zumindest nicht wie man es benutzen soll. Kann das jemand aufklären? Oder mir nen Tipp geben, wie ich ein selbst definiertes lokales reading mit diesem Modul setzen kann?