HTTPMOD: mit Setter ein Reading in einem anderen Device setzen

Begonnen von DeeSPe, 22 Januar 2026, 14:02:54

Vorheriges Thema - Nächstes Thema

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

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

TomLee

attr httpmod_setter set01TextArg 1
Dann geht auch ein String.

TomLee

Upps, in einem anderen Device hab ich überlesen, sry.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

ZitatDieser Setter soll die aktuelle Versionsnummer als Reading "version" bei allen z2m Bridges setzen.

Darf man mal fragen wozu man mehrere Bridge Devices hat?

DeeSPe

Zitat von: TomLee am 22 Januar 2026, 15:26:11
ZitatDieser 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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

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?

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe