Hallo liebe Forenmitglieder,
ich schreibe gerade an einem neuen HTTPMOD Device für die Versionsprüfung von zigbee2mqtt.
Als Vorlage habe ich mir das schon kursierende Device aus dem Forum geborgt und quasi neu geschrieben und es funktioniert auch bereits wie gewünscht!
Leider gibt mir meine z2m Bridge aber seine Version nicht von allein Preis, somit bleibt mir nur die Möglichkeit diese manuell in einem Reading zu setzen.
Nun hätte ich gern im HTTPMOD Device einen Setter "set <dev> updateVersions". Dieser Setter soll die aktuelle Versionsnummer als Reading "version" bei allen z2m Bridges setzen. Die aktuelle VErsion habe ich natürlich bereits als Reading im HTTPMOD Device.
Wie bekomme ich einen solchen Setter hin? Am Ende muss der Setter ein "setreading <devspec> version x.x.x" ausführen.
Kann mir evtl. hierbei jemand weiterhelfen?
Danke im Voraus.
Gruß
Dan
Hi,
soweit waren wir schon:
https://forum.fhem.de/index.php?topic=118691.0
So werden aber nur numerische Werte akzeptiert:
defmod httpmod_setter HTTPMOD {}
attr httpmod_setter set01Local 1
attr httpmod_setter set01Name version
Gruß Thomas
attr httpmod_setter set01TextArg 1
Dann geht auch ein String.
Upps, in einem anderen Device hab ich überlesen, sry.
Danke für den Hinweis.
Aber so wäre das ein separates Device, oder?
Ich möchte das gern im schon vorhandenen Device umsetzen.
In der commandref habe ich ein Beispiel gefunden:
attr PM set01Name HeizungSoll
attr PM set01URL http://MyPoolManager/cgi-bin/webgui.fcgi?sid=$sid
attr PM set01Hint 6,10,20,30
attr PM set01Min 6
attr PM set01Max 30
attr PM setHeader1 Content-Type: application/json
attr PM set01Data {"set" :{"34.3118.value" :"$val" }}
Daraus könnte werden:
attr PM set01Name updateVersions
attr PM set01URL https://myserver:1883/fhem?cmd=setreading%20'.$devspec.'%20version%20'.$version
attr PM set01Hint 2.7.0,2.7.1,2.7.2
Das probiere ich nachher mal aus.
Gibt es die FHEM eigene URL, also "http(s)://server:1883/fhem", schon als benutzbare Variable in HTTPMOD?
Das wäre natürlich für ein daraus entstehendes AttrTemplate besser zu benutzen als wenn man das von Hand eintragen muss.
Gruß
Dan
ZitatDieser Setter soll die aktuelle Versionsnummer als Reading "version" bei allen z2m Bridges setzen.
Darf man mal fragen wozu man mehrere Bridge Devices hat?
Zitat von: TomLee am 22 Januar 2026, 15:26:11ZitatDieser Setter soll die aktuelle Versionsnummer als Reading "version" bei allen z2m Bridges setzen.
Darf man mal fragen wozu man mehrere Bridge Devices hat?
Normal braucht man nur eins.
Ich habe mich nur an die Vorlage gehalten, dort war es auch so.
Evtl. gibt es ja Benutzer die mehr als 300 Devices haben und somit mehr als eine Bridge einsetzen!?!?!?
Oder es gibt eine PROD-Bridge und eine TEST-Bridge!?
Gruß
Dan
Zitat von: DeeSPe am 22 Januar 2026, 15:24:56Daraus könnte werden:
attr PM set01Name updateVersions
attr PM set01URL https://myserver:1883/fhem?cmd=setreading%20'.$devspec.'%20version%20'.$version
attr PM set01Hint 2.7.0,2.7.1,2.7.2
Das klappt leider nicht, auch nicht mit Übergabe von CSRF.
Ich suche weiter eine Lösung.
Gruß
Dan
ohne CSRF klappt das bei mir:
defmod httpmod_setter HTTPMOD {}
attr httpmod_setter set01Hint 2.7.0,2.7.1,2.7.2
attr httpmod_setter set01Name version
attr httpmod_setter set01TextArg 1
attr httpmod_setter set01URL http://192.168.188.27:8083/fhem?cmd=setreading%20d%20version%20$val
attr httpmod_setter verbose 0
Ich versteh noch nicht woher bei Dir $devspec kommt?
Danke für's Testen TomLee. ;-)
Ich benutze https und stoße immer wieder darauf und weiß noch nicht wie ich das umgehen kann:
start_SSL https://localhost:8083 timed outKann man die Zertifikatsprüfung irgendwie umgehen, es ist nämlich lokal selbst signiert?
Bin jetzt so weit ($devspec war nur ein Platzhalter):
attr z2m_version_check set01Hint {join(',',devspec2array(AttrVal($name,'z2m_bridgeRegexp','TYPE=MQTT2?_DEVICE:FILTER=NAME=.*zigbee.*bridge.*')))}
attr z2m_version_check set01Name updateVersions
attr z2m_version_check set01TextArg 1
attr z2m_version_check set01URL https://localhost:8083/fhem?cmd=setreading%20$val%20version%202.7.1
Meine beiden Probleme sind nun der SSL Check und dass ich die URL nicht dynamisch zusammenbauen kann. Hinten die Version soll eigentlich aus einem Reading kommen sowie der Host+Port müssten eigentlich auch dynamisch sein und ich würde gern noch "$FW_CSRF" dranhängen wollen, nur wie?
Gruß
Dan
Zitat von: DeeSPe am 23 Januar 2026, 18:24:46Meine beiden Probleme sind nun der SSL Check und dass ich die URL nicht dynamisch zusammenbauen kann. Hinten die Version soll eigentlich aus einem Reading kommen sowie der Host+Port müssten eigentlich auch dynamisch sein und ich würde gern noch "$FW_CSRF" dranhängen wollen, nur wie?
URL dynamisch zu erstellen habe ich nun auch hinbekommen:
attr z2m_version_check replacement01Mode expression
attr z2m_version_check replacement01Regex %%VERSION%%
attr z2m_version_check replacement01Value {ReadingsVal($name,'latestVersion','0.0.0').$FW_CSRF}Gibt es in FHEM eine Variable für die eigene URL?
Nun fehlt nur noch den SSL Check zu deaktivieren!?
Vielleicht finde ich dafür auch noch eine Lösung...
Gruß
Dan
ZitatGibt es in FHEM eine Variable für die eigene URL?
Die Frage erinnert mich an irgendwas, ich komm aber schon seit gestern nicht drauf, ich kann mir vorstellen ja, kann mich aber auch täuschen.
Ich kann hier eigentlich gar nicht mitreden, weil ich von den Zusammenhängen gar keine Ahnung habe.
{'http://'.hostname.':'.InternalVal("WEB", "PORT", "8083")}
Gibt bei mir aus:
http://fhempi:8083
edit:
{(AttrNum('WEB', 'HTTPS', 0) ? 'https' : 'http').'://'.hostname.':'.InternalVal('WEB', 'PORT', '8083')}
Woher kommt "hostname"?
Der restliche Ansatz sieht vielversprechend aus, schaue ich mir mal an.
Gruß
Dan
https://forum.fhem.de/index.php?msg=1356498
Ich weiß auch nicht, wie man das jetzt am besten löst...
Ich denke ich habe es jetzt soweit hinbekommen.
Die ganze URL lässt sich leider nicht zusammenbauen, zumindest bekomme ich die eigentliche Base-URL nicht mit den Platzhaltern für "replace" erzeugt. Das ist aber, denke ich auch gar nicht nötig, da der eigene Host ja immer über "localhost" angesprochen werden kann.
Nach einigem Testen habe ich nun herausbekommen dass ich das Reading über http setzen kann, obwohl ich eigentlich https verwende, damit umgehe ich den SSL Check.
Vielen Dank für deine Unterstützung TomLee!
Gruß
Dan
P.S. Das Ergebnis werde ich nach weiterem Testen dann im MQTT Template Bereich bereitstellen.