Hallo Freunde,
ich steh jetzt seit Stunden auf dem Schlauch und komme ich nicht mehr weiter... ich seh schon den Wald vor lauter Bäumen nicht mehr.
Ich habe es geschafft meinen Jalousiesteuerungshub per curl / http-get / http-post auszuslesen und entsprechend auch die Jalousien zu schalten.
Nun war meine Idee, ich möchte gern Schalter in FHEM pro Jalousie / pro Raum / pro Etage / Haus.
Die HTTP Post Befehle zum Schalten habe ich.
Natürlich würde ich gern auch den Status auslesen und entsprechend am DummySchalter das Icon setzen etc.
Anfangs dachte ich mir, dass mach ich mit DummySchaltern in Kombination mit einem notify.
Die URLs sind ja sehr Statisch, es kommen ja nicht auf einmal neue Schalter hinzu.
Dann wollte ich das alles irgendwie dynamischer machen... warum weiß ich gar nicht mehr.
Jedenfalls habe ich mich gerade sehr tief in HTTPMOD verloren und habe PRobleme mit dem auslesen des empfangenem JSON.
Ich wollte jetzt die Szenen / einzelnen Jalousien aus dem Hub auslesen, die Szenen bekomme ich die Jalousien nicht.
Welche RegExp oder JSON muss ich anwenden damit ich nur die wlss[Zahl] rausbekomme? Das sind die einzelnen Schalter
{
"n": "Wiser One Gateway",
"rt": [
"oic.wk.res"
],
"if": [
"oic.if.baseline"
],
"links": [
{
"rt": [
"oic.wk.p"
],
"href": "/oic/p",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.wk.d"
],
"href": "/oic/d",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.wk.con"
],
"href": "/oic/con",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.wk.mnt"
],
"href": "/oic/mnt",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.dateTime"
],
"href": "/dateTime",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.localization"
],
"href": "/localization",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.wifiNet"
],
"href": "/wlan0",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.wifiNet"
],
"href": "/wlan1",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.wifiScan"
],
"href": "/wifiScan",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.wifiAp"
],
"href": "/accessPoint",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.cloudConnector"
],
"href": "/azureConnector",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.accountPairing"
],
"href": "/accountPairing",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.hmi"
],
"href": "/hmi",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"wiserone.r.licensing"
],
"href": "/licensing",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.wk.scenelist"
],
"href": "/sceneList",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.wk.scenecollection",
"wiserone.scene.collection.basic"
],
"href": "/sceneCollection/0",
"if": [
"oic.if.b",
"oic.if.baseline"
]
},
{
"rt": [
"oic.wk.scenecollection"
],
"href": "/sceneCollection/1",
"if": [
"oic.if.b",
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss31",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/31",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss32",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/32",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss37",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/37",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss39",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/39",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss42",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/42",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss44",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/44",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss47",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/47",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss49",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/49",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss51",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/51",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss68",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/68",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss70",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/70",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss97",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/97",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss99",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/99",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.openlevel",
"oic.wk.con",
"wiserone.d.wlss",
"wiserone.p.zigbee",
"wiserone.r.window.cover"
],
"href": "/wlss102",
"if": [
"oic.if.a"
]
},
{
"rt": [
"oic.wk.scenemember"
],
"href": "/sceneMember/102",
"if": [
"oic.if.baseline"
]
},
{
"rt": [
"oic.r.pushconfiguration"
],
"if": [
"oic.if.b",
"oic.if.baseline"
],
"href": "/pushNotificationConfig"
},
{
"rt": [
"wiserone.r.zigbeeNet"
],
"if": [
"oic.if.baseline"
],
"href": "/zan0"
},
{
"rt": [
"wiserone.r.availableFirmware"
],
"if": [
"oic.if.baseline"
],
"href": "/availableFirmware"
}
]
}
Dann habe ich noch eine andere URL die ich auslesen möchte, da seh ich den Status der Jalousien (im openLevel Block => "openLevel": 100 ist auf "openLevel": 0 ist zu)
Weiterhin kann ich da auch die Namen der Jalousien auslesen und in welchem Raum diese sind: "n": "Rollladen 2", "wiserone.room": "17_0".
{
"href": "/wlss31/openLevel",
"rep": {
"rt": [
"oic.r.openlevel"
],
"if": [
"oic.if.baseline"
],
"range": [
0,
100
],
"step": 1,
"openLevel": 100
}
},
{
"href": "/wlss31/oic/con",
"rep": {
"rt": [
"oic.wk.con"
],
"if": [
"oic.if.baseline"
],
"n": "Rollladen 2",
"wiserone.room": "17_0"
}
},
{
"href": "/wlss31/shutter/1",
"rep": {
"rt": [
"wiserone.r.window.cover"
],
"if": [
"oic.if.baseline"
],
"action": 0
}
},
{
"href": "/wlss32/openLevel",
"rep": {
"rt": [
"oic.r.openlevel"
],
"if": [
"oic.if.baseline"
],
"range": [
0,
100
],
"step": 1,
"openLevel": 100
}
}
[code]
So nun wäre meine Frage, wie kann ich alle diese Informationen zu den einzelnen Schaltern aus den div. Blöcken auslesen und wie sollte ich das angehen, dass wenn ich die DummySchalter bediene die HTTP-POSTs gesendet werden?!
Über notifys direkt? oder über den HTTPMOD?
VG Danke
René
Statt dummy + notify würde ich readingsProxy für die einzelnen Jalousien benutzen:
http://wiki.fhem.de/wiki/ReadingsProxy
Und um herauszufinden, wie die JSON-Pfade lauten müssen, würde ich das Attribut extractAllJSON des HTTPMOD auf 1 oder 2 setzen:
http://fhem.de/commandref.html#HTTPMODattr
Hallo.
Beim Httpmod kannst Du mehrere geht und put definieren, Die Du dann individuell ansteuern kannst.
So hatte ich mal eine Vallox KWL angesteuert.
Es gab set Befehle für die einzelnen Profile.
So war alles in einem httpmod device definiert .
Gruß Christian
Gesendet von meinem SM-G930F mit Tapatalk
hi,
Xenos.. also wenn ich alle JSON Bausteine extrahieren lassen, dann sieht das quais so aus:
/wlss37
2019-12-15 14:19:10
links_22_if_0
oic.if.a
2019-12-15 14:19:10
links_22_rt_0
oic.r.openlevel
2019-12-15 14:19:10
links_22_rt_1
oic.wk.con
2019-12-15 14:19:10
links_22_rt_2
wiserone.d.wlss
2019-12-15 14:19:10
links_22_rt_3
wiserone.p.zigbee
2019-12-15 14:19:10
links_22_rt_4
wiserone.r.window.cover
2019-12-15 14:19:10
links_23_href
/sceneMember/37
2019-12-15 14:19:10
links_23_if_0
oic.if.baseline
2019-12-15 14:19:10
links_23_rt_0
oic.wk.scenemember
2019-12-15 14:19:10
links_24_href
/wlss39
2019-12-15 14:19:10
links_24_if_0
oic.if.a
2019-12-15 14:19:10
links_24_rt_0
oic.r.openlevel
2019-12-15 14:19:10
links_24_rt_1
oic.wk.con
2019-12-15 14:19:10
links_24_rt_2
wiserone.d.wlss
2019-12-15 14:19:10
links_24_rt_3
wiserone.p.zigbee
2019-12-15 14:19:10
links_24_rt_4
wiserone.r.window.cover
2019-12-15 14:19:10
links_25_href
/sceneMember/39
2019-12-15 14:19:10
links_25_if_0
oic.if.baseline
2019-12-15 14:19:10
links_25_rt_0
oic.wk.scenemember
2019-12-15 14:19:10
links_26_href
/wlss42
2019-12-15 14:19:10
links_26_if_0
oic.if.a
2019-12-15 14:19:10
links_26_rt_0
oic.r.openlevel
2019-12-15 14:19:10
links_26_rt_1
oic.wk.con
2019-12-15 14:19:10
links_26_rt_2
wiserone.d.wlss
2019-12-15 14:19:10
links_26_rt_3
wiserone.p.zigbee
2019-12-15 14:19:10
links_26_rt_4
wiserone.r.window.cover
2019-12-15 14:19:10
links_27_href
/sceneMember/42
2019-12-15 14:19:10
links_27_if_0
oic.if.baseline
2019-12-15 14:19:10
links_27_rt_0
oic.wk.scenemember
2019-12-15 14:19:10
links_28_href
/wlss44
2019-12-15 14:19:10
links_28_if_0
oic.if.a
2019-12-15 14:19:10
links_28_rt_0
oic.r.openlevel
2019-12-15 14:19:10
links_28_rt_1
oic.wk.con
2019-12-15 14:19:10
links_28_rt_2
wiserone.d.wlss
2019-12-15 14:19:10
links_28_rt_3
wiserone.p.zigbee
ich will aber nur die /wlssXXX haben.
Dabei muss man sehen, dass links_href auch andere werte haben kann => /sceneMember/37 ich habe schon mit getRegex gespielt, bekomme es aber nicht hin, auf speziellen Regex SEiten haben ich aber einige RegEx herausgefunden, die gehen müssten: /wlss[0-9]*
Ist halt sehr komisch...
Kann man eigentlich mehrere Werte aus dem JSON Response in einen getName schreiben lassen???
Das würde mir die Verarbeitung erleichtern.
VG
Um nur einzelne JSON Elemente zu extrahieren, setzt du extractAllJSON wieder auf 0 (bzw. entfernst es, weil 0 die Voreinstellung ist) und gehst vor wie hier beschrieben:
http://fhem.de/commandref.html#HTTPMODjsonconfiguration
Als readingXXJSON (wobei XX eine Durchnumerierung ist) setzt du dann die JSON-Pfade, die du jetzt als Namen der Readings herausbekommen hast.
Moinsen,
ich komme hier nicht weiter, bzw versteh es einfach nicht und jetzt sind auch zuviele Ideen im Raum.
Das ist mein HTTPMOD:
Internals:
BUSY 0
CHANGED
DEF none 0
FUUID 5df8c7b2-f33f-0804-0b59-e50a21052479b620
Interval 0
JSONEnabled 1
LASTSEND 1576587769.98605
MainURL
ModuleVersion 3.5.9 - 13.2.2019
NAME HomeTouch
NOTIFYDEV global
NR 462
NTFY_ORDER 50-HomeTouch
STATE ???
TRIGGERTIME 0
TRIGGERTIME_FMT
TYPE HTTPMOD
addr http://192.168.178.128:80
auth 0
buf
code 500
compress 1
conn
data {"action" : 0}
displayurl http://192.168.178.128/ocf/02/shutter/1
header
host 192.168.178.128
httpheader HTTP/1.1 500 Internal Server Error
Server: nginx/1.11.5
Date: Tue, 17 Dec 2019 13:02:50 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: close
httpversion 1.1
hu_blocking 0
hu_filecount 34
hu_port 80
hu_portSfx
ignoreredirects 0
loglevel 4
path /ocf/02/shutter/1
protocol http
redirects 0
timeout 2
url http://192.168.178.128/ocf/02/shutter/1
value 0
QUEUE:
READINGS:
2019-12-17 13:25:15 Taster /wlss31 /wlss32 /wlss37 /wlss39 /wlss42 /wlss44 /wlss47 /wlss49 /wlss51 /wlss68 /wlss70 /wlss97 /wlss99 /wlss102
2019-12-17 13:25:13 globaleSzenen Home Away Sleep
2019-12-17 13:25:14 lokaleSzenen Buero_up WZ_up SZ_up KZ_down GZ_up SZ_down GZ_down Buero_down WZ_down Bad_OG_up Bad_OG_down KZ_up
REQUEST:
data {"action" : $val}
header
ignoreredirects 0
retryCount 0
type set03
url http://192.168.178.128/ocf/$val2/shutter/1
value 0
sslargs:
Attributes:
enableControlSet 1
get01JSON sceneValues
get01Name globaleSzenen
get01Poll 1
get01RecombineExpr join " ", @matchlist
get01URL http://192.168.178.128/ocf/sceneCollection/0
get02JSON sceneValues
get02Name lokaleSzenen
get02Poll 1
get02RecombineExpr join " ", @matchlist
get02URL http://192.168.178.128/ocf/sceneCollection/1
get03Name Taster
get03Poll 1
get03RecombineExpr join " ", @matchlist
get03RegOpt g
get03Regex \/wlss[0-9]*
get03URL http://192.168.178.128/ocf/oic/res
httpVersion 1.1
room Wiser
set01Data {"isIrrelevant": false,"lastScene": "$val"}
set01Hint x,y,z
set01Name globaleSzenen
set01URL http://192.168.178.128/ocf/sceneCollection/0
set02Data {"isIrrelevant": false,"lastScene": "$val"}
set02Hint x,y,z
set02Name lokaleSzenen
set02URL http://192.168.178.128/ocf/sceneCollection/1
set03Data {"action" : $val}
set03Hint 0,1,2
set03Name Taster
set03URL http://192.168.178.128/ocf/$val2/shutter/1
userattr get01JSON get01Name get01Poll:0,1 get01RecombineExpr get01URL get02JSON get02Name get02Poll:0,1 get02RecombineExpr get02URL get03Name get03Poll:0,1 get03RecombineExpr get03RegOpt get03Regex get03URL set01Data set01Hint set01Name set01URL set02Data set02Hint set02Name set02URL set03Data set03Hint set03IMap set03Name set03URL
verbose 5
In den Readings die ich jetzt habe, habe ich die
Die Szenen die ich auslösen kann und die auch immer schon einer Funktion entsprechen, also BAD_up ist alle Jalousien im Bad hochfahren, AWAY ist das ganz Haus verriegeln und
ich habe die einzelnen Taster, die ich in einer URL ersetzen muss
http://192.168.178.128/ocf/$val2/shutter/1 und dann noch einen Parameter für auf/zu/stop (0,1,2) mitgeben muss im POST Request.
Ich würde jetzt gern in FHEM "Schalter" haben die für jeden einzelnen Taster etwas steuern können und ein/zwei Taster, die die Szenen Steuern (wahrscheinlich 2, da unterschiedliche URLs angesprochen werden)
Also wenn ich das über einen globalen Taster-Schalter realisieren will, dann müsste ich aus einer setList den Schalter wlssXXX auswählen und das Kommando auf/zu/stop.
Nachteil, ich habe keinen STatus für alle Taster.
Wenn ich viele einzelne Taster mache, dann kann ich bestimmt den Status aus dem Json auslesen und der Wert (wlssXXX) ist fest und ich muss nur entscheiden über setList (aus/zu/stop)
Bei den Szenen, steht jeder Name schon für das Kommando, daher wäre da nur die Übertragung der Szene an die Url notwendig.
Also bei bei einem globalen Dummy (Taster-Schalter) würde ich gern in setList das Reading aus dem HTTPMOD mit der Liste der Taster haben. Ich krieg das aber nicht in setList rein :(
Mit ReadingsProxy komme ich gar nicht klar... ich versteh einfach die Erklärung nicht...
Hab jetzt schon X-Bsp. gelesen, es macht nicht klick.
VG+Danke
René
Noch eine Frage zur Auswertung, ich habe ja jetzt die Möglichkeit gefunden ein paar Werte mit HTTPMOD zu herauszufiltern.
Kann man aber auch folgendes mit HTTPMOD machen oder wie wäre das möglich... ich beiß mir die Zähne aus:
{
"href": "/wlss31/openLevel",
"rep": {
"rt": [
"oic.r.openlevel"
],
"if": [
"oic.if.baseline"
],
"range": [
0,
100
],
"step": 1,
"openLevel": 100
}
},
{
"href": "/wlss31/oic/con",
"rep": {
"rt": [
"oic.wk.con"
],
"if": [
"oic.if.baseline"
],
"n": "Rollladen 2",
"wiserone.room": "17_0"
}
},
{
"href": "/wlss31/shutter/1",
"rep": {
"rt": [
"wiserone.r.window.cover"
],
"if": [
"oic.if.baseline"
],
"action": 1
}
},
{
"href": "/wlss32/openLevel",
"rep": {
"rt": [
"oic.r.openlevel"
],
"if": [
"oic.if.baseline"
],
"range": [
0,
100
],
"step": 1,
"openLevel": 100
}
},
{
"href": "/wlss32/oic/con",
"rep": {
"rt": [
"oic.wk.con"
],
"if": [
"oic.if.baseline"
],
"n": "Kueche",
"wiserone.room": "17_0"
}
},
{
"href": "/wlss32/shutter/1",
"rep": {
"rt": [
"wiserone.r.window.cover"
],
"if": [
"oic.if.baseline"
],
"action": 1
}
},
Das sind zwei der vielen Jalousieschalter bei mir.
Wie kann ich die den Auswerten, sodass ich für einen Schalter zB /wlss31 folgende Werte alle bekommen:
"openLevel": 100
"n": "Kueche",
"wiserone.room": "17_0"
geht das überhaupt mit Regulären ausdrücken?
Brauch ich dafür etwas anderes? Ich habe ja schon den Namen /wlssXXX diesen würde ich jetzt benutzen wollen um weitere Infomationen zu bekommen.
Im Prinzip ist der Name wlssXXX
und die Attribute:
"openLevel": 100
"n": "Kueche",
"wiserone.room": "17_0"
das Device, welches ich aktuell halten möchte und welches ich schalten möchte, die ein STück der URL ist ja auch darin enthalten "href": "/wlssXXX/shutter/1",
VG
REné
Setze mal extractAllJSON auf 1, gucke wie es aussieht, und dann lösche extractAllJSON und setze einzelne readingXXJSON attribute
Hi,
habe ich schon alles gemacht, mit extractAllJSON bekomme alles. Das sieht dann wie im Screenshot aus.
Mit get01Regex \/wlss[0-9]* bekomme ich die Namen der Taster.
Aber mit get01JSON rep_openLevel bekomme ich nix.... Laut WIKI sollte man so die Verschachtelung in Griff bekommen und den Wert auslesen können.
https://wiki.fhem.de/wiki/HTTPMOD#Parsing_JSON
Ich versteh es nicht... oder geht hier get01JSON nicht und ich brauch readingXXJSON ??
VG
René
get.... oder reading.... ist nur eine Frage, wie Du die Werte abfragen möchtest: entw. explizit mit get Kommando, oder automatich regelmässig
get... mit get...Poll ist gleich wie reading..., aber Du hast die Möglichkeit dazu, einzelne get Kommandos auszuführen.
Jetzt zeig mal bitte ein "list HomeTouch" mit gesetztem extractAllJSON
Hier https://forum.fhem.de/index.php/topic,106361.msg1002730.html#msg1002730 war es nicht gesetzt,
und hier https://forum.fhem.de/index.php/topic,106361.msg1002183.html#msg1002183 sieht man keine Küche mit Wert 100
Hi amenomade,
im letzten Post ist ein Screenshot, den hatte ich vergessen, da sieht man einen Teil von extractAllJSON
Ich bin jetzt einen Schritt weiter und habe auf get03Regex umgestellt.
Ich habe jetzt hier https://regex101.com/ solange mit der Response vom Request Reguläre Ausdrücke durchprobiert, bis die "Values" rauskommen.
Fage, gibts überhaupt VALUES bei RegEx?? Ich meine ich suche doch immer einen Match... Das get01JSON macht den Eindruck, dass man nach "Values" suchen kann.
Nun gut, hier mein list vom HomeTouch2... und komischerweise funktionieren jetzt aber nur noch einer von 3 RegEx... obowhl alle wunderbar in der Seite funktionieren.
Internals:
BUSY 0
DEF none 0
FUUID 5df8f058-f33f-0804-bc44-71e85495d49391cd
Interval 0
LASTSEND 1576615102.21429
MainURL
ModuleVersion 3.5.9 - 13.2.2019
NAME HomeTouch2
NOTIFYDEV global
NR 466
NTFY_ORDER 50-HomeTouch2
STATE ???
TRIGGERTIME 0
TRIGGERTIME_FMT
TYPE HTTPMOD
addr http://192.168.178.128:80
auth 0
buf
code 200
compress 1
conn
data
displayurl http://192.168.178.128/ocf/deviceStatus
header Content-Type: application/json
host 192.168.178.128
httpheader HTTP/1.1 200 OK
Server: nginx/1.11.5
Date: Tue, 17 Dec 2019 20:38:22 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: close
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
httpversion 1.1
hu_blocking 0
hu_filecount 1
hu_port 80
hu_portSfx
ignoreredirects 0
loglevel 4
path /ocf/deviceStatus
protocol http
redirects 0
timeout 2
url http://192.168.178.128/ocf/deviceStatus
value 0
QUEUE:
READINGS:
2019-12-17 21:38:22 Name_Taster Rollladen 2", "wiserone.room": "17_0" } }, { "href": "\/wlss31\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss32\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss32\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Kueche", "wiserone.room": "17_0" } }, { "href": "\/wlss32\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss37\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss37\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "17_0" } }, { "href": "\/wlss37\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss39\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss39\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen", "wiserone.room": "04_Bad Unten" } }, { "href": "\/wlss39\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss42\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss42\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "23_Buero" } }, { "href": "\/wlss42\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss44\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss44\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "23_0" } }, { "href": "\/wlss44\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss47\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss47\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "06_0" } }, { "href": "\/wlss47\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss49\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss49\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "06_0" } }, { "href": "\/wlss49\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss51\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss51\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "09_Kinderzimmer Sw" } }, { "href": "\/wlss51\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss68\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss68\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "09_Kinderzimmer Wi" } }, { "href": "\/wlss68\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss70\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss70\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "09_Kinderzimmer Wi" } }, { "href": "\/wlss70\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss97\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss97\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Terrasse", "wiserone.room": "17_0" } }, { "href": "\/wlss97\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss99\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss99\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "09_Kinderzimmer Sw" } }, { "href": "\/wlss99\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss102\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss102\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen", "wiserone.room": "04_Bad Oben" } }, { "href": "\/wlss102\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action
2019-12-17 21:35:52 OL_Taster-1 0
2019-12-17 21:35:52 OL_Taster-10 0
2019-12-17 21:35:52 OL_Taster-11 0
2019-12-17 21:35:52 OL_Taster-12 0
2019-12-17 21:35:52 OL_Taster-13 0
2019-12-17 21:35:52 OL_Taster-14 0
2019-12-17 21:35:52 OL_Taster-2 0
2019-12-17 21:35:52 OL_Taster-3 0
2019-12-17 21:35:52 OL_Taster-4 0
2019-12-17 21:35:52 OL_Taster-5 0
2019-12-17 21:35:52 OL_Taster-6 0
2019-12-17 21:35:52 OL_Taster-7 0
2019-12-17 21:35:52 OL_Taster-8 0
2019-12-17 21:35:52 OL_Taster-9 0
2019-12-17 21:35:52 WR_Taster 17_0" } }, { "href": "\/wlss31\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss32\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss32\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Kueche", "wiserone.room": "17_0" } }, { "href": "\/wlss32\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss37\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss37\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "17_0" } }, { "href": "\/wlss37\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss39\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss39\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen", "wiserone.room": "04_Bad Unten" } }, { "href": "\/wlss39\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss42\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss42\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "23_Buero" } }, { "href": "\/wlss42\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss44\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss44\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "23_0" } }, { "href": "\/wlss44\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss47\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss47\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "06_0" } }, { "href": "\/wlss47\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss49\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss49\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "06_0" } }, { "href": "\/wlss49\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss51\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss51\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "09_Kinderzimmer Sw" } }, { "href": "\/wlss51\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss68\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss68\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 1", "wiserone.room": "09_Kinderzimmer Wi" } }, { "href": "\/wlss68\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss70\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss70\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "09_Kinderzimmer Wi" } }, { "href": "\/wlss70\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss97\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss97\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Terrasse", "wiserone.room": "17_0" } }, { "href": "\/wlss97\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss99\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss99\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen 2", "wiserone.room": "09_Kinderzimmer Sw" } }, { "href": "\/wlss99\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action": 1 } }, { "href": "\/wlss102\/openLevel", "rep": { "rt": [ "oic.r.openlevel" ], "if": [ "oic.if.baseline" ], "range": [ 0, 100 ], "step": 1, "openLevel": 0 } }, { "href": "\/wlss102\/oic\/con", "rep": { "rt": [ "oic.wk.con" ], "if": [ "oic.if.baseline" ], "n": "Rollladen", "wiserone.room": "04_Bad Oben" } }, { "href": "\/wlss102\/shutter\/1", "rep": { "rt": [ "wiserone.r.window.cover" ], "if": [ "oic.if.baseline" ], "action
REQUEST:
data
header Content-Type: application/json
ignoreredirects 0
retryCount 0
type get04
url http://192.168.178.128/ocf/deviceStatus
value 0
defptr:
readingBase:
Name_Taster get
readingNum:
Name_Taster 04
readingOutdated:
requestReadings:
get04:
Name_Taster get 04
sslargs:
Attributes:
enableControlSet 1
get01Name W_Taster
get01RegOpt g
get01Regex "href":[ \t]+"\/(.*\d)"
get02Name OL_Taster
get02RegOpt g
get02Regex "openLevel":[ \t]+([\d\.]+)
get03Name WR_Taster
get03RegOpt g
get03Regex "wiserone.room":[ \t]+"([\d]*_.+)"
get04Name Name_Taster
get04RegOpt g
get04Regex "n":[ \t]+"(.*)"
getHeader1 Content-Type: application/json
getPoll 1
getURL http://192.168.178.128/ocf/deviceStatus
httpVersion 1.1
room Wiser
userattr get01JSON get01Name get01Poll:0,1 get01RecombineExpr get01RegOpt get01Regex get01URL get02ExtractAllJSON:0,1,2 get02JSON get02Name get02Poll:0,1 get02RecombineExpr get02RegOpt get02Regex get02URL get03Name get03Poll:0,1 get03RecombineExpr get03RegOpt get03Regex get03URL get04Name get04RegOpt get04Regex getHeader1 getPoll:0,1 getURL set01Data set01Hint set01Name set01URL set02Data set02Hint set02Name set02URL set03Data set03Hint set03IMap set03Name set03URL
verbose 5
Kann man mehrere RegEx in einem Wert speichern? Sodass ich alle Infos zu einer Jalousie zusammenbekomme?
Ich glaube nicht... ich hoffe jetzt das die Nummern von W_Taster, OL_Taster, WR_Taster und Name_Taster immer zusammenpassen und das ich diese dann immer anhand der Nr weiterverarbeiten kann.
VG
René
Attributes:
enableControlSet 1
get01Name W_Taster
get01RegOpt g
get01Regex "href":[ \t]+"\/(.*\d)"
get02Name OL_Taster
get02RegOpt g
get02Regex "openLevel":[ \t]+([\d\.]+)
get03Name WR_Taster
get03RegOpt g
get03Regex "wiserone.room":[ \t]+"([\d]*_.+)"
get04Name Name_Taster
get04RegOpt g
get04Regex "n":[ \t]+"(.*)"
getHeader1 Content-Type: application/json
getPoll 1
getURL http://192.168.178.128/ocf/deviceStatus
httpVersion 1.1
room Wiser
userattr get01JSON get01Name get01Poll:0,1 get01RecombineExpr get01RegOpt get01Regex get01URL get02ExtractAllJSON:0,1,2 get02JSON get02Name get02Poll:0,1 get02RecombineExpr get02RegOpt get02Regex get02URL get03Name get03Poll:0,1 get03RecombineExpr get03RegOpt get03Regex get03URL get04Name get04RegOpt get04Regex getHeader1 getPoll:0,1 getURL set01Data set01Hint set01Name set01URL set02Data set02Hint set02Name set02URL set03Data set03Hint set03IMap set03Name set03URL
verbose 5
Da ist immer noch kein extractAllJSON zu sehen...
Laut Screenshot sollte
get04JSON Wlss31OpenLevel
get04JSON 01_rep_openLevel
ein Reading Wlss31OpenLevel mit Wert 100 zurückliefern
hi amenomade,
du meinst bestimmt das hier oder?
get04Name Wlss31OpenLevel
get04JSON 01_rep_openLevel
Ja, so wäre sicherlich eine zuordnung möglich.
Die Nummern, am Anfang jedes Readings wurden aber durch extractAllJSON autoamtisch angelegt, so wie jeder "Treffer" in Verbindung mit get04RegOpt g ja automatisch zu
vielen Taster-XX führt, jenachdem wieviel Treffer kommen.
Ich versteh die Doku aber so, dass
get04JSON rep_openLevel
alle verschachtelten Ergebnisse geben müssen und es kommt nichts...
VG
René
Ne dann .*rep_openLevel
Hi amenomade,
Danke für dein Feedback, ich habe jetzt mehrere Stunden noch versucht mit Regex alles hinzubekommen. Läuft jetzt alles.
Mit dem Extract-Json isses besser, da ich glaube, es ist stabiler gegen Änderungen aber ein Problem hab ich noch:
Orginal: "href": "/wlss102/shutter/1",
Das ist die Auswertung der Response:
Taster_WiserLink-4 = \/wlss102\/shutter\/1
Wie kann man in der Response die \, abstellen? Wieso kommen die überhaupt?
Regex für die Suche ist : "href":[ \t]+"(.[\S]+.[\S]+.\d)"
VG
René
Wieso kommen die überhaupt? Weil deine Regex die auch fängt
.[\S]+.[\S]+.\d
Zitat von: CommandRef(get|reading)[0-9]*OExpr
defines an optional expression that is used in an eval to compute / format a readings value after parsing an HTTP response
The raw value from the parsing will be in the variable $val.
Hallo Freunde,
ich bin aktuell mit meinem Ergebiss ziemlich zufrieden, aber eine Sache stört mich noch und das ist leider wirklich leicht zu erklären..
- Ich habe ein HTTPMOD welches mir alle wichtigen Parameter aus dem JalousieHub rausliest (via Intervall).
- Ich habe jetzt 14 Dummys, die jeweils eine Jalousie schalten können.
- Ich habe eine notify, welches jenachdem was ich in den JalousieDummys drücke, die URL baut und den Postrequest absetzt um die Jalousien zu schalten.
HTTPMOD:
Internals:
BUSY 0
DEF none 0
FUUID 5df9ff86-f33f-0804-1db2-f03fb7efb573da15
Interval 300
JSONEnabled 1
LASTSEND 1577896756.52013
MainURL
MaxAgeEnabled 1
ModuleVersion 3.5.19 - 29.11.2019
NAME HomeTouch
NOTIFYDEV global
NR 451
NTFY_ORDER 50-HomeTouch
STATE ???
STILLDONETIME 0
TRIGGERTIME 1577897046.00526
TRIGGERTIME_FMT 2020-01-01 17:44:06
TYPE HTTPMOD
addr http://192.168.178.128:80
auth 0
buf
code 200
compress 1
conn
data
displayurl http://192.168.178.128/ocf/sceneCollection/1
header Content-Type: application/json
host 192.168.178.128
httpheader HTTP/1.1 200 OK
Server: nginx/1.11.5
Date: Wed, 01 Jan 2020 16:39:16 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Connection: close
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
httpversion 1.1
hu_blocking 0
hu_filecount 3
hu_port 80
hu_portSfx
ignoreredirects 0
loglevel 4
path /ocf/sceneCollection/1
protocol http
redirects 0
timeout 2
url http://192.168.178.128/ocf/sceneCollection/1
value 0
CompiledRegexes:
QUEUE:
READINGS:
2020-01-01 17:24:07 Taster_OpenLevel-1 0
2020-01-01 17:24:07 Taster_OpenLevel-10 0
2020-01-01 17:24:07 Taster_OpenLevel-11 0
2020-01-01 17:24:07 Taster_OpenLevel-12 0
2020-01-01 17:24:07 Taster_OpenLevel-13 0
2020-01-01 17:24:07 Taster_OpenLevel-14 0
2020-01-01 17:24:07 Taster_OpenLevel-2 0
2020-01-01 17:24:07 Taster_OpenLevel-3 0
2020-01-01 17:24:07 Taster_OpenLevel-4 0
2020-01-01 17:24:07 Taster_OpenLevel-5 0
2020-01-01 17:24:07 Taster_OpenLevel-6 0
2020-01-01 17:24:07 Taster_OpenLevel-7 0
2020-01-01 17:24:07 Taster_OpenLevel-8 0
2020-01-01 17:24:07 Taster_OpenLevel-9 0
2020-01-01 17:24:06 Taster_WiserLink-1 wlss31
2020-01-01 17:24:06 Taster_WiserLink-10 wlss68
2020-01-01 17:24:06 Taster_WiserLink-11 wlss70
2020-01-01 17:24:06 Taster_WiserLink-12 wlss97
2020-01-01 17:24:06 Taster_WiserLink-13 wlss99
2020-01-01 17:24:06 Taster_WiserLink-14 wlss102
2020-01-01 17:24:06 Taster_WiserLink-2 wlss32
2020-01-01 17:24:06 Taster_WiserLink-3 wlss37
2020-01-01 17:24:06 Taster_WiserLink-4 wlss39
2020-01-01 17:24:06 Taster_WiserLink-5 wlss42
2020-01-01 17:24:06 Taster_WiserLink-6 wlss44
2020-01-01 17:24:06 Taster_WiserLink-7 wlss47
2020-01-01 17:24:06 Taster_WiserLink-8 wlss49
2020-01-01 17:24:06 Taster_WiserLink-9 wlss51
2020-01-01 17:39:15 Taster_WiserName-1 Rollladen 2
2020-01-01 17:39:15 Taster_WiserName-10 Rollladen 1
2020-01-01 17:39:15 Taster_WiserName-11 Rollladen 2
2020-01-01 17:39:15 Taster_WiserName-12 Terrasse
2020-01-01 17:39:15 Taster_WiserName-13 Rollladen 2
2020-01-01 17:39:15 Taster_WiserName-14 Rollladen
2020-01-01 17:39:15 Taster_WiserName-2 Kueche
2020-01-01 17:39:15 Taster_WiserName-3 Rollladen 1
2020-01-01 17:39:15 Taster_WiserName-4 Rollladen
2020-01-01 17:39:15 Taster_WiserName-5 Rollladen 1
2020-01-01 17:39:15 Taster_WiserName-6 Rollladen 2
2020-01-01 17:39:15 Taster_WiserName-7 Rollladen 1
2020-01-01 17:39:15 Taster_WiserName-8 Rollladen 2
2020-01-01 17:39:15 Taster_WiserName-9 Rollladen 1
2020-01-01 17:24:07 Taster_WiserRoom-1 17_WZ
2020-01-01 17:24:07 Taster_WiserRoom-10 09_KZ
2020-01-01 17:24:07 Taster_WiserRoom-11 09_KZ
2020-01-01 17:24:07 Taster_WiserRoom-12 17_WZ
2020-01-01 17:24:07 Taster_WiserRoom-13 09_Gaestezimmer
2020-01-01 17:24:07 Taster_WiserRoom-14 04_Bad_Oben
2020-01-01 17:24:07 Taster_WiserRoom-2 17_WZ
2020-01-01 17:24:07 Taster_WiserRoom-3 17_WZ
2020-01-01 17:24:07 Taster_WiserRoom-4 04_Bad_Unten
2020-01-01 17:24:07 Taster_WiserRoom-5 23_Buero
2020-01-01 17:24:07 Taster_WiserRoom-6 23_Buero
2020-01-01 17:24:07 Taster_WiserRoom-7 06_SZ
2020-01-01 17:24:07 Taster_WiserRoom-8 06_SZ
2020-01-01 17:24:07 Taster_WiserRoom-9 09_Gaestezimmer
2020-01-01 17:39:15 globaleSzenen Home Away Sleep
2020-01-01 17:39:16 lokaleSzenen Buero_up,WZ_up,SZ_up,KZ_down,GZ_up,SZ_down,GZ_down,Buero_down,WZ_down,Bad_OG_up,Bad_OG_down,KZ_up
REQUEST:
data
header Content-Type: application/json
ignoreredirects 0
retryCount 0
type get06
url http://192.168.178.128/ocf/sceneCollection/1
value 0
defptr:
readingBase:
Taster_OpenLevel-1 get
Taster_OpenLevel-10 get
Taster_OpenLevel-11 get
Taster_OpenLevel-12 get
Taster_OpenLevel-13 get
Taster_OpenLevel-14 get
Taster_OpenLevel-2 get
Taster_OpenLevel-3 get
Taster_OpenLevel-4 get
Taster_OpenLevel-5 get
Taster_OpenLevel-6 get
Taster_OpenLevel-7 get
Taster_OpenLevel-8 get
Taster_OpenLevel-9 get
Taster_WiserLink-1 get
Taster_WiserLink-10 get
Taster_WiserLink-11 get
Taster_WiserLink-12 get
Taster_WiserLink-13 get
Taster_WiserLink-14 get
Taster_WiserLink-2 get
Taster_WiserLink-3 get
Taster_WiserLink-4 get
Taster_WiserLink-5 get
Taster_WiserLink-6 get
Taster_WiserLink-7 get
Taster_WiserLink-8 get
Taster_WiserLink-9 get
Taster_WiserName-1 get
Taster_WiserName-10 get
Taster_WiserName-11 get
Taster_WiserName-12 get
Taster_WiserName-13 get
Taster_WiserName-14 get
Taster_WiserName-2 get
Taster_WiserName-3 get
Taster_WiserName-4 get
Taster_WiserName-5 get
Taster_WiserName-6 get
Taster_WiserName-7 get
Taster_WiserName-8 get
Taster_WiserName-9 get
Taster_WiserRoom-1 get
Taster_WiserRoom-10 get
Taster_WiserRoom-11 get
Taster_WiserRoom-12 get
Taster_WiserRoom-13 get
Taster_WiserRoom-14 get
Taster_WiserRoom-2 get
Taster_WiserRoom-3 get
Taster_WiserRoom-4 get
Taster_WiserRoom-5 get
Taster_WiserRoom-6 get
Taster_WiserRoom-7 get
Taster_WiserRoom-8 get
Taster_WiserRoom-9 get
globaleSzenen get
lokaleSzenen get
readingNum:
Taster_OpenLevel-1 02
Taster_OpenLevel-10 02
Taster_OpenLevel-11 02
Taster_OpenLevel-12 02
Taster_OpenLevel-13 02
Taster_OpenLevel-14 02
Taster_OpenLevel-2 02
Taster_OpenLevel-3 02
Taster_OpenLevel-4 02
Taster_OpenLevel-5 02
Taster_OpenLevel-6 02
Taster_OpenLevel-7 02
Taster_OpenLevel-8 02
Taster_OpenLevel-9 02
Taster_WiserLink-1 01
Taster_WiserLink-10 01
Taster_WiserLink-11 01
Taster_WiserLink-12 01
Taster_WiserLink-13 01
Taster_WiserLink-14 01
Taster_WiserLink-2 01
Taster_WiserLink-3 01
Taster_WiserLink-4 01
Taster_WiserLink-5 01
Taster_WiserLink-6 01
Taster_WiserLink-7 01
Taster_WiserLink-8 01
Taster_WiserLink-9 01
Taster_WiserName-1 04
Taster_WiserName-10 04
Taster_WiserName-11 04
Taster_WiserName-12 04
Taster_WiserName-13 04
Taster_WiserName-14 04
Taster_WiserName-2 04
Taster_WiserName-3 04
Taster_WiserName-4 04
Taster_WiserName-5 04
Taster_WiserName-6 04
Taster_WiserName-7 04
Taster_WiserName-8 04
Taster_WiserName-9 04
Taster_WiserRoom-1 03
Taster_WiserRoom-10 03
Taster_WiserRoom-11 03
Taster_WiserRoom-12 03
Taster_WiserRoom-13 03
Taster_WiserRoom-14 03
Taster_WiserRoom-2 03
Taster_WiserRoom-3 03
Taster_WiserRoom-4 03
Taster_WiserRoom-5 03
Taster_WiserRoom-6 03
Taster_WiserRoom-7 03
Taster_WiserRoom-8 03
Taster_WiserRoom-9 03
globaleSzenen 05
lokaleSzenen 06
readingOutdated:
readingSubNum:
Taster_OpenLevel-1 -1
Taster_OpenLevel-10 -10
Taster_OpenLevel-11 -11
Taster_OpenLevel-12 -12
Taster_OpenLevel-13 -13
Taster_OpenLevel-14 -14
Taster_OpenLevel-2 -2
Taster_OpenLevel-3 -3
Taster_OpenLevel-4 -4
Taster_OpenLevel-5 -5
Taster_OpenLevel-6 -6
Taster_OpenLevel-7 -7
Taster_OpenLevel-8 -8
Taster_OpenLevel-9 -9
Taster_WiserLink-1 -1
Taster_WiserLink-10 -10
Taster_WiserLink-11 -11
Taster_WiserLink-12 -12
Taster_WiserLink-13 -13
Taster_WiserLink-14 -14
Taster_WiserLink-2 -2
Taster_WiserLink-3 -3
Taster_WiserLink-4 -4
Taster_WiserLink-5 -5
Taster_WiserLink-6 -6
Taster_WiserLink-7 -7
Taster_WiserLink-8 -8
Taster_WiserLink-9 -9
Taster_WiserName-1 -1
Taster_WiserName-10 -10
Taster_WiserName-11 -11
Taster_WiserName-12 -12
Taster_WiserName-13 -13
Taster_WiserName-14 -14
Taster_WiserName-2 -2
Taster_WiserName-3 -3
Taster_WiserName-4 -4
Taster_WiserName-5 -5
Taster_WiserName-6 -6
Taster_WiserName-7 -7
Taster_WiserName-8 -8
Taster_WiserName-9 -9
Taster_WiserRoom-1 -1
Taster_WiserRoom-10 -10
Taster_WiserRoom-11 -11
Taster_WiserRoom-12 -12
Taster_WiserRoom-13 -13
Taster_WiserRoom-14 -14
Taster_WiserRoom-2 -2
Taster_WiserRoom-3 -3
Taster_WiserRoom-4 -4
Taster_WiserRoom-5 -5
Taster_WiserRoom-6 -6
Taster_WiserRoom-7 -7
Taster_WiserRoom-8 -8
Taster_WiserRoom-9 -9
requestReadings:
get01:
Taster_WiserLink-1 get 01-1
Taster_WiserLink-10 get 01-10
Taster_WiserLink-11 get 01-11
Taster_WiserLink-12 get 01-12
Taster_WiserLink-13 get 01-13
Taster_WiserLink-14 get 01-14
Taster_WiserLink-2 get 01-2
Taster_WiserLink-3 get 01-3
Taster_WiserLink-4 get 01-4
Taster_WiserLink-5 get 01-5
Taster_WiserLink-6 get 01-6
Taster_WiserLink-7 get 01-7
Taster_WiserLink-8 get 01-8
Taster_WiserLink-9 get 01-9
get02:
Taster_OpenLevel-1 get 02-1
Taster_OpenLevel-10 get 02-10
Taster_OpenLevel-11 get 02-11
Taster_OpenLevel-12 get 02-12
Taster_OpenLevel-13 get 02-13
Taster_OpenLevel-14 get 02-14
Taster_OpenLevel-2 get 02-2
Taster_OpenLevel-3 get 02-3
Taster_OpenLevel-4 get 02-4
Taster_OpenLevel-5 get 02-5
Taster_OpenLevel-6 get 02-6
Taster_OpenLevel-7 get 02-7
Taster_OpenLevel-8 get 02-8
Taster_OpenLevel-9 get 02-9
get03:
Taster_WiserRoom-1 get 03-1
Taster_WiserRoom-10 get 03-10
Taster_WiserRoom-11 get 03-11
Taster_WiserRoom-12 get 03-12
Taster_WiserRoom-13 get 03-13
Taster_WiserRoom-14 get 03-14
Taster_WiserRoom-2 get 03-2
Taster_WiserRoom-3 get 03-3
Taster_WiserRoom-4 get 03-4
Taster_WiserRoom-5 get 03-5
Taster_WiserRoom-6 get 03-6
Taster_WiserRoom-7 get 03-7
Taster_WiserRoom-8 get 03-8
Taster_WiserRoom-9 get 03-9
get04:
Taster_WiserName-1 get 04-1
Taster_WiserName-10 get 04-10
Taster_WiserName-11 get 04-11
Taster_WiserName-12 get 04-12
Taster_WiserName-13 get 04-13
Taster_WiserName-14 get 04-14
Taster_WiserName-2 get 04-2
Taster_WiserName-3 get 04-3
Taster_WiserName-4 get 04-4
Taster_WiserName-5 get 04-5
Taster_WiserName-6 get 04-6
Taster_WiserName-7 get 04-7
Taster_WiserName-8 get 04-8
Taster_WiserName-9 get 04-9
get05:
globaleSzenen get 05
get06:
lokaleSzenen get 06
lastpoll:
Taster_OpenLevel 1577896746.00505
Taster_WiserLink 1577896746.00505
Taster_WiserName 1577896746.00505
Taster_WiserRoom 1577896746.00505
globaleSzenen 1577896746.00505
lokaleSzenen 1577896746.00505
sslargs:
Attributes:
enableControlSet 1
get01Name Taster_WiserLink
get01RegOpt g
get01Regex \/(wlss[0-9]*)
get01URL http://192.168.178.128/ocf/oic/res
get02Name Taster_OpenLevel
get02RegOpt g
get02Regex "openLevel":[ \t]+([\d]+)
get03Name Taster_WiserRoom
get03RegOpt g
get03Regex "wiserone\.room":[ \t]+"([\d]+_[\w]+_*[\w]*)"
get04Name Taster_WiserName
get04RegOpt g
get04Regex "n":[ \t]+"([\w]*[\s\d]*)"
get05JSON sceneValues
get05Name globaleSzenen
get05Poll 1
get05RecombineExpr join " ", @matchlist
get05URL http://192.168.178.128/ocf/sceneCollection/0
get06JSON sceneValues
get06Name lokaleSzenen
get06Poll 1
get06RecombineExpr join ",", @matchlist
get06URL http://192.168.178.128/ocf/sceneCollection/1
getHeader1 Content-Type: application/json
getPoll 1
getURL http://192.168.178.128/ocf/deviceStatus
httpVersion 1.1
readingMaxAge 300
readingMaxAgeReplacement "offline"
readingMaxAgeReplacementMode text
room WISER
set01Data {"isIrrelevant": false,"lastScene": "$val"}
set01Name setGlobaleSzenen
set01TextArg 1
set01URL http://192.168.178.128/ocf/sceneCollection/0
set02Data {"isIrrelevant": false,"lastScene": "$val"}
set02Name setLokaleSzenen
set02TextArg 1
set02URL http://192.168.178.128/ocf/sceneCollection/1
set03Data {"action" : $val}
set03Hint 0,1,2
set03Name Taster
set03URL http://192.168.178.128/ocf/wlss97/shutter/1
userattr get01Decode get01JSON get01Name get01Poll:0,1 get01RecombineExpr get01RegOpt get01Regex get01URL get01extractAllJSON:0,1,2 get02ExtractAllJSON:0,1,2 get02JSON get02Name get02Poll:0,1 get02RecombineExpr get02RegOpt get02Regex get02URL get03Name get03Poll:0,1 get03RecombineExpr get03RegOpt get03Regex get03URL get04Name get04RegOpt get04Regex get05JSON get05Name get05Poll:0,1 get05RecombineExpr get05URL get06JSON get06Name get06Poll:0,1 get06RecombineExpr get06URL getHeader1 getPoll:0,1 getURL readingMaxAge readingMaxAgeReplacement readingMaxAgeReplacementMode:text,reading,internal,expression,delete set01Data set01Hint set01Name set01TextArg:0,1 set01URL set02Data set02Hint set02Name set02TextArg:0,1 set02URL set03Data set03Hint set03IMap set03Name set03URL
verbose 0
eine Jalousie
Internals:
CHANGED
FUUID 5dfcc192-f33f-0804-9e09-63234e2aee61ea4b
NAME Rollladen_EG_BAD
NR 465
STATE 100
TYPE dummy
READINGS:
2020-01-01 14:36:57 Link_im_HomeTouch wlss39
2020-01-01 14:36:57 Name_im_HomeTouch Rollladen
2020-01-01 14:36:57 OpenLevel 100
2020-01-01 14:36:57 Raum_im_HomeTouch 04_Bad_Unten
2020-01-01 14:36:57 state auf
Attributes:
alexaName Rolladen
alexaRoom Badezimmer unten
devStateIcon 100:fts_shutter_10 1\d.*:fts_shutter_10 2\d.*:fts_shutter_20 3\d.*:fts_shutter_30 4\d.*:fts_shutter_40 5\d.*:fts_shutter_50 6\d.*:fts_shutter_60 7\d.*:fts_shutter_70 8\d.*:fts_shutter_80 9\d.*:fts_shutter_90 \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
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 0
webCmd auf:zu:stop
das notify:
Internals:
DEF Rollladen_.*:(0|1|2) {my $Jalousie=ReadingsVal("$NAME","Link_im_HomeTouch",0);; fhem("\"bash /opt/fhem/FHEM/rolladen_schalten.sh $Jalousie $EVENT\"")}
FUUID 5df64a4e-f33f-0804-a68e-fdb4b8fbe7e7319b
NAME notify_Rollladen_schalten
NR 489
NTFY_ORDER 50-notify_Rollladen_schalten
REGEXP Rollladen_.*:(0|1|2)
STATE 2020-01-01 17:24:07
TRIGGERTIME 1577895847.53689
TYPE notify
READINGS:
2019-12-29 20:14:30 state active
Attributes:
room FENSTER_TÜREN
verbose 0
Das zusammen funktioniert alles sehr gut.
Was mich allerdings noch mega nervt... Wenn FHEM die Jalousien abends alle runter fährt oder ich manuel... dann ändert sich das "OpenLevel", also der Zustand der Jalousie und das bekommen die Dummys nicht mit... also die UserReadings in den Dummys.
Wie bekomme ich das noch hin, dass das OpenLevel, welches gleichzeitig in den Dummys noch als stateFormat gesetzt ist, immer aktuell ist?!
Es wird ja regelmäßig im HTTPMOD aktualisiert.?!xenos1984, hat noch das Device ReadingsProxy erwähnt, das habe ich mal ausprobiert, das es quasi das "OpenLevel" als State aus dem HTTPMOD ließt.
Dann habe ich alle Parameter wie bei den Dummys gesetzt.
Der State wird regelmäßig gelesen und ändert sich hier, aber da kann ich per webcmd nicht schalten... da kommt immer ne Fehlermeldung:
Unknown argument zu, choose one of das Schalten funktioniert nicht, das notify müßte auch für das ReadingsProxy funktionieren.
Readingsproxy:
Internals:
CFGFN
DEF HomeTouch:Taster_OpenLevel-12
DEVICE HomeTouch
FUUID 5e0cba1b-f33f-0804-cf9d-a82b4f824e1be46c
NAME Rollladen_EG_WZ_Terasse
NOTIFYDEV global,HomeTouch
NR 38815
NTFY_ORDER 50-Rollladen_EG_WZ_Terasse
READING Taster_OpenLevel-12
STATE 0
TYPE readingsProxy
CONTENT:
HomeTouch 1
READINGS:
2020-01-01 17:24:07 Link_im_HomeTouch wlss97
2020-01-01 17:24:07 Name_im_HomeTouch Terrasse
2020-01-01 17:24:07 Raum_im_HomeTouch 17_WZ
2020-01-01 16:57:17 lastCmd 1
2020-01-01 17:24:07 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 auf:0 zu:1 stop:2
genericDeviceType switch
homebridgeMapping On=state,cmdOn=1,cmdOff=0
icon fts_shutter
room FENSTER_TÜREN
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
Welches ist jetzt der beste Weg, das Problem zu lösen?
VG
René
Hab mir das jetzt nicht im Detail angesehen, aber bekommst du kein. Event vom HTTPMOD, das du nutzen kannst, um den Dummy zu aktualisieren?
Kurz, weil mobil
Für readingsProxy: Ich würde das Attribut setFn des readingsProxy so anpassen, dass es das tut, was sonst dein notify tut.
Soll heißen - was macht denn der Skript /opt/fhem/FHEM/rolladen_schalten.sh? Da würde ich ansetzen.
Hi,
@KernSani, die OpenLevel im HTTPMOD sind auch nur Readings. Wenn das Interval zuschlägt, dann werden im EventMonitor die Werte neu gelesen:
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-1: wlss31
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-2: wlss32
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-3: wlss37
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-4: wlss39
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-5: wlss42
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-6: wlss44
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-7: wlss47
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-8: wlss49
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-9: wlss51
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-10: wlss68
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-11: wlss70
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-12: wlss97
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-13: wlss99
2020-01-01 18:35:40 HTTPMOD HomeTouch Taster_WiserLink-14: wlss102
2020-01-01 18:35:42 readingsProxy Rollladen_EG_WZ_Terasse 94
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-1: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-2: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-3: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-4: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-5: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-6: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-7: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-8: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-9: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-10: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-11: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-12: 94
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-13: 0
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_OpenLevel-14: 1
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-1: 17_WZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-2: 17_WZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-3: 17_WZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-4: 04_Bad_Unten
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-5: 23_Buero
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-6: 23_Buero
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-7: 06_SZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-8: 06_SZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-9: 09_Gaestezimmer
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-10: 09_KZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-11: 09_KZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-12: 17_WZ
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-13: 09_Gaestezimmer
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserRoom-14: 04_Bad_Oben
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-1: Rollladen 2
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-2: Kueche
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-3: Rollladen 1
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-4: Rollladen
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-5: Rollladen 1
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-6: Rollladen 2
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-7: Rollladen 1
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-8: Rollladen 2
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-9: Rollladen 1
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-10: Rollladen 1
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-11: Rollladen 2
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-12: Terrasse
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-13: Rollladen 2
2020-01-01 18:35:42 HTTPMOD HomeTouch Taster_WiserName-14: Rollladen
2020-01-01 18:35:42 HTTPMOD HomeTouch globaleSzenen: Home Away Sleep
2020-01-01 18:35:43 HTTPMOD HomeTouch lokaleSzenen: Buero_up,WZ_up,SZ_up,KZ_down,GZ_up,SZ_down,GZ_down,Buero_down,WZ_down,Bad_OG_up,Bad_OG_down,KZ_up
@xenos1984
Mein Script baut den HTTP-Post request zusammen, der an den JalousieHub gesendet wird.
#!/bin/bash
set -x
# Curl-Befehl zum Schalten von Merten Rolladen durch Uebergabe von zwei Parameter
# $1 = Jalousie, $2 = Aktion (auf, zu, stop)
################################################
#genieren von Post-Daten
################################################
read -d '' -r post_data <<EOF
{"action": $2}
EOF
################################################
#Befehl
################################################
curl -i -H "Content-Type: application/json" \
-X POST --data "$post_data" "http://192.168.178.128/ocf/$1/shutter/1"
Wenn ich nur einen Parameter gehabt hätte, dann hätte man durch den Dummy mit dem notify auch direkt über den HTTPMOD das schalten lassen können, aber HTTPMOD nimmt nur einen Value entgegen und daher habe ich dann ein Script geschrieben, dass zwei Parameter nimmt "# $1 = Jalousie, $2 = Aktion (auf, zu, stop)"
Den POST Befehl zusammen zu bauen war MEGA schwer, weil da kommts echt auch die richtigen "Anführungszeichen" an...
VG
René
Leicht OT: Hatte vor einiger Zeit mal kurz nachgelesen gehabt und meine, dass der Hub auch MQTT spricht.
Wenn das so ist, glaube ich, dass eine Lösung mit MQTT2_.* einfacher zu bauen wäre.
Ansonsten bin ich bei xenos1984: Da müßten passende setFn her (da solltest du nicht gleich anfangen, irgendwas ziemlich oberflächliches zu fixen (eventMap), sondern erst mal die Basis sauber gestalten.
(Und was userReadings sollen, die feste Werte aus einem anderen Device holen, (und das noch ohne trigger-Angabe), erschließt sich mir auch nicht).
Hallo Beta-User,
also der HUB spricht meines Wissens (noch) kein MQTT, aber demnächst kann man evtl. mit IFTTT drauf zugreifen.
Bisher gabs keine Lösungen außer über Alexa (und damit das Internet) drauf zuzugreifen.
Ich habe jetzt in mühevoller Kleinarbeit raus gefunden wie man offline mit dem HUB sprechen kann und damit auch dieses System in FHEM integrieren kann und damit auch Jalousien steuern kann. Über den Hub kann man auch Heizungsthermostate und Lampen steuern. Merten bringt da noch viel mehr....
Ich würde ja gern ein Modul für WISER anbieten, da ich jetzt schon viel Wissen zusammengetragen habe, aber mir fehlt das Wissen um PERL etc. um solch ein Modul zu bauen.
Dann könnte das Modul nämlich selber direkt mit dem Hub sich verbinden, alle Geräte und Zustände auslesen und als Devices schaltbar machen.
Das wäre toll.
So habe ich das jetzt mit meinen eigenen Möglichkeiten gemacht und das über Dummys realisiert und mit einem notify (und eine Sequenz).
Ich würde jetzt nur noch gern den Zustand der Jalousie, weil man in auslesen kann auch in Fhem sichbar machen, also in meinen Dummys.
Das sollte jetzt auch die Frage beantworten, warum man Werte in einem Dummy "sammelt"... weil ich so alle Informationen zu einer Jalousie zusammen habe.
Warum sollte man es nicht machen? Ich lese immer wieder, dass viele von den PROs das hier auch schreiben... das sie keinen Sinn darin sehen.
Also für mich ist der Sinn klar... und andere Module bringen mir das aktuell nicht oder ich versteh es nicht.
ReadingsProxy habe ich getestet, da kann ich nur auf einen Reading auslesen. Was in meinem Fall jetzt viell. sogar funktionieren würde, weil ich nur den Zustand der Jalousie auslesen würde.
Ich hätte es gern noch dynamischer gehabt, falls sich im Hub durch FW-Udates mal was ändert, hätte ich sogar gern die Raumnamen im Hub oder die URLs die erzeugt werden müssen, um die einzelnen Jalousien anzusteuern, auch noch alles dynamsich ausgelesen. Aber das kann der Readingsproxy scheinbar nicht, oder ich versteh es nicht.
Mit setFn habe ich es weiterhin auch nicht hinbekommen, dass ich mein Script zum schalten auslösen kann...
Also zusammen hänge ich jetzt hier mit meiner 95% Lösung, basierend auf Dummys und hätte jetzt nur noch die Werte wo die Jalousie steht. Bleibt wahrscheinlich nur ein weiteres notity.
VG+Danke
René
Bei mir ersetzt ein readingsProxy sowohl Dummy als auch Notify, weil es ja eigentlich genau dafür gedacht ist, z.B. ein einzelnes Reading aus einem anderem Gerät wie dem HTTPMOD zu vereinzeln und einzeln bedienbar zu machen. Ganz grob:
define Rollladen_EG_BAD readingsProxy HomeTouch:Taster_OpenLevel-4
attr Rollladen_EG_BAD setFn {my $Jalousie=ReadingsVal("HomeTouch","Taster_WiserLink-4",0);; fhem("\"bash /opt/fhem/FHEM/rolladen_schalten.sh $Jalousie $EVENT\"")}
(Und dazu natürlich noch mehr Attribute, die du jetzt im Dummy hast, um das ganze zu bedienen.)
An und für sich sollte aber auch HTTPMOD keine Probleme haben, etwas mit 2 Parametern zu schalten, ohne dass man da einen Bash Skript bemühen muss.
Hi xenos,
also ich bin ja gern bereit zu lernen und sitze gerade dabei und versuche es besser zu machen... :)
Hier mein ReadingsProxy
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 100
TYPE readingsProxy
CONTENT:
HomeTouch 1
READINGS:
2020-01-02 12:13:34 Link_im_HomeTouch wlss97
2020-01-02 12:13:34 Name_im_HomeTouch Terrasse
2020-01-02 12:13:34 Raum_im_HomeTouch 17_WZ
2020-01-01 16:57:17 lastCmd 1
2020-01-02 12:13:34 state 100
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 auf:0 zu:1 stop:2
genericDeviceType switch
homebridgeMapping On=state,cmdOn=1,cmdOff=0
icon fts_shutter
room FENSTER_TÜREN
setFn Rollladen_.*:(0|1|2) {my $Jalousie=ReadingsVal("$READING","Link_im_HomeTouch",0);; fhem("\"bash /opt/fhem/FHEM/rolladen_schalten.sh $Jalousie $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
Das Ding schaltet gar nichts... es kommt nicht mal ne LogAusgabe
Ich lese jetzt als state den Wert von OpenLevel aus.
Den statischen Rest habe ich mir mit userReadings reingeholt.
Was zu schalten wäre ist über webCmd gesetzt.
Die eigentlichen Werte die ich brauch sind dann über eventMap gesetzt.
Klicke ich auf die WebComands bekomme ich immer folgenden Fehler : "Unknown argument auf, choose one of 0 1 2"
Klicke ich auf die setList einstellungen kommt das Gleiche: Unknown argument auf, choose one of 0 1 2
ohne setList sagt er mir "Unknown argument auf, choose one of "
Ich würde das gern Verbessern, aber versteh noch nicht ganz wie... und warum...
Ich habe noch ein paar andere stellen bei mir in Fhem wo ich das so gemacht habe um meine Heizung zu steuern... wenn ich das verstehen würde, dann könnte ich mehr optimieren..
VG
René
PS: ich habe bei HTTPMOD lange gesucht und bin nur auf das hier gestoßen und da ist sowohl bei Text als auch bei Zahlen nur ein Übergabewert erwähnt... ich wollte ja zwei Werte übergeben, einmal in der URL das Gerät und dann den Status den es machen soll...
https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_set_command_and_send_data_to_a_device (https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_set_command_and_send_data_to_a_device)
unten beim Taster, da gibts in der URL $val2 ...
set01Data {"isIrrelevant": false,"lastScene": "$val"}
set01Name setGlobaleSzenen
set01TextArg 1
set01URL http://192.168.178.128/ocf/sceneCollection/0
set02Data {"isIrrelevant": false,"lastScene": "$val"}
set02Name setLokaleSzenen
set02TextArg 1
set02URL http://192.168.178.128/ocf/sceneCollection/1
set03Data {"action" : $val}
set03Hint 0,1,2
set03Name Taster
set03URL http://192.168.178.128/ocf/$val2/shutter/1
Bei der setFn irritieren mich gleich mehrere Dinge:
Rollladen_.*:(0|1|2) {my $Jalousie=ReadingsVal("$READING","Link_im_HomeTouch",0);; fhem("\"bash /opt/fhem/FHEM/rolladen_schalten.sh $Jalousie $CMD\"")}
- Welchen Zweck hat das Rollladen_.*:(0|1|2)? Da sollte nur der Perl-Code hin, also der {...} Teil.
- Im Code, übergibst du $READING da, wo der Name des Gerätes sein sollte, und das müsste hier "Rollladen_EG_WZ_Terasse" sein, denn so heißt ja der readingsProxy, dessen "Link_im_HomeTouch" du hier ausliest. Stattdessen könntest du aber auch auf die userReadings verzichten und gleich das Reading my $Jalousie=ReadingsVal("HomeTouch","Taster_WiserLink-12",0) setzen.
Hi Xenos,
ja das ist noch alles im Versuchsbau...
Rollladen_.*:(0|1|2) => das war c+p aus meinem notify... weil ich nur auf diese Werte reagieren wollte...
mit $READING wollte ich den Namen des Readingsproxy setzen in dem das ausgeführt wird... dachte das funktioniert damit.
Trotz alledem... es kommt gar nicht zu setFn... weil es schon an den Fehlermeldungen beim drücken der webCmd kommt.
VG
René
Ich würde es für den Anfang erst einmal ohne eventMap und webCmd versuchen, d.h. die set-Variablen so aufrufen, wie sie vom HTTPMOD erwartet werden und sie nicht durch "auf" etc. ersetzen. Soll heißen, erst einmal würde ich versuchen, den readingsProxy mit der einfachsten möglichen, minimalen Konfiguration zum Laufen zu bringen, statt gleich mit Copy&Paste alles auf einmal vom Dummy zu kopieren. Daran feilen kann man immer noch, wenn es erst einmal läuft.
Hi xenos, dann wird mit das readingsproxy aber immer unverständlichlicher... Der httpmod hat doch aber nichts sinnvolles an set commandos mit denen ich irgendwas machen könnte...
den benutze ich doch quasi nur um einfach JSON aus dem hub auslesen kann und damit an die entsprechenden Infos zu kommen...
VG René
Du hast aber in der setList des readingsProxy die Werte 0 1 2 vorgegeben, die du letztlich an den Hub übermitteln willst, wenn ich das richtig sehe - zwar in deiner Lösung nicht über das HTTPMOD Device, sondern über einen Bash Skript. Soll heißen, der Skript erwartet Werte 0 1 2. Dann würde ich - zumindest für einen ersten Test - den readingsProxy auch so bauen, dass er nur mit diesen Werten arbeitet statt "auf", "zu" etc. und diese Umbenennung erst dann einbauen, wenn es damit läuft.
Die set Befehle sollten sich ja auch über das HTTPMOD Device realisieren lassen statt über den Bash Skript, aber auch das kann man als weitere Optimierung für später lassen.
Hi Xenos,
also reduziert auf das Nötigste, geht es jetzt:
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 93
TYPE readingsProxy
CONTENT:
HomeTouch 1
READINGS:
2020-01-03 11:30:14 Link_im_HomeTouch wlss97
2020-01-03 11:30:14 Name_im_HomeTouch Terrasse
2020-01-03 11:30:14 Raum_im_HomeTouch 17_WZ
2020-01-03 11:30:14 lastCmd 2
2020-01-03 11:29:03 state 93
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
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("\"bash /opt/fhem/FHEM/rolladen_schalten.sh $Jalousie $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
selbst wenn ich das webCmd 0:1:2 noch setzte geht es...
Aber wenn ich das webCmd ändere auf die Werte die ich als "Endnutzer" sehen möchte und dazu eine eventMap setzte, dann knallt es wieder
"Unknown argument auf, choose one of 0 1 2"
Der HTTPMOD ist aktuell nur ein lesendes Device, es gibt dort eigentlich keine set-Befehle für die einzelnen Taster(Jalousien), da ich ja nicht zwei Values übergeben kann.
Aktuell ist da nur ein statischer Schalter für eine Jalousie fest eingestellt. Nur so zum Testen.
Tja, jetzt ist die Frage... kann man überhaupt eigene webcmd setzten oder nur das, was auch das PARENT Device vorgibt?
VG
Wenn, dann musst du webCmd UND eventMap ändern...Dann kannst du auch dmdIcon ergänzen.
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...
Bist du sicher, dass die Reihenfolge stimmt? In den Beispielen zu eventMap ist es umgekehrt:
eventMap 0:auf 1:zu 2:stop
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 (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....
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.
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...
Wieso? Das mit ReadingsProxy tut doch, oder?
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é
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]
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 (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é
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.
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...
Ja, die gleiche Lösung sollte auch für eine setURL funktionieren. Dann braucht man kein Attribut dynamisch ändern, sondern nur ein Reading auslesen.