Hauptmenü

FHEM App - Manage your Home

Begonnen von Gisbert, 12 März 2021, 15:05:20

Vorheriges Thema - Nächstes Thema

jemu75

Zitat von: tomspatz am 10 April 2021, 16:16:45
tja wenn ich das wüsste.
ich probiere mich an einem template fürs Thermostat. Da ich verschiedene im Einsatz habe, ist das so das es im Frontend also in dem das die Frau auch bedienen kann, ein drop down list.
Für verschiedene Aktoren dahinte immer verschiedene Logik abei im FE immer das selbe.
Das wäre mir schon fast am liebsten, würde mir aber auch eine Anzeige beim Bewegen des Sliders anschauen. Zumal ich den Sliderwert ja begrenzen kann. Dieser müsste dann aber auch "halbe" Grade können.
Oder halt eich schickes so halbkreis förmiges "ding" welches mit dem dicken finger zu stellen wäre.

Ich möchte dir auch nicht zu viel abverlangen, die neuentwicklung wolltest du ja erstmal drosseln.

Danke für die Rückmeldung. Nochmal ganz grundlegend - du verlangst damit nicht zuviel ab und technisch machbar ist das alles.  :)
Aber: Der Grundsatz der App ist, dass die Elemente absolut intuitiv bedienbar sein müssen. Deshalb orientiert sich das Standard-Template auch stark an klassischen Schaltern.
Mit dem Slider habe ich schoaber mehr wird da nn eine weitere Variante zu den klassischen "+" und "-" Tasten geschaffen und in manchen Fällen ist das auch praktischer. Ich werde jedoch genau überlegen, wie viele unterschiedliche "Bedienarten" (optische Elemente) es künftig noch geben wird, damit das Grundlayout erhalten bleibt.
Mir ist bewusst, dass damit Grenzen bzgl. der freien Gestaltung gesetzt sind - was übrigens gewollt ist. Und wie auch schon mal geschrieben, soll die App bewusst keine "Konkurrenz" zu Lösungen wie Tablet UI sein, die den Fokus auf eine komplett freie Gestaltung legen.

Ich werde den slider also noch etwas "feintunen" und bin für konkrete Vorschläge auch gern offen.  :)


jemu75

Zitat von: Wzut am 10 April 2021, 18:38:02
@jemu75 , bei der Gelegenheit bin ich über ein kleines Parser Problem gestolpert.
Bei MAX! gibt es zwei Readings, (rferror und onoff)  die beide den Wert 0 oder 1 haben können.
Eine simple Zuweisung im Template ala :
"right2": ["rferror:1::mdi-wifi-off","rferror:::mdi-wifi"]

greift nicht egal welchen Wert rferror (0/1) annimmt. Eine Änderung auf
"right2": ["Readings.rferror.Value:1::mdi-wifi-off","Readings.rferror.Value:::mdi-wifi"]
bringt allerdings den gewünschten Effekt, nur finde ich es nicht logisch (Beim onoff Readings ist es das gleiche Spiel)

Hoppla, das ist ja eigenartig. Denn exakt das was du im zweiten Besipiel machst, macht die App intern. Sprich im Normalfall wird "Readings." vorangestellt und nach dem Reading wird ".Value" ergänzt.
Kannst du mir bitte mal ein jsonlist2 von dem besagten Device schicken.  :)

Wzut

mir ist zwar unklar welche tiefgreifenden Erkentnisse ein jsonlist2 von einem simplen Reading das nur "0" oder "1" sein kann bringen soll,
aber des Menschen Wille ist sein Himmelreich :
{
  "Arg":"NAME=Test_FK",
  "Results": [
  {
    "Name":"Test_FK",
    "PossibleSets":"saveConfig wakeUp:noArg factoryReset:noArg groupid deviceRename restoreReadings:Test_FK,1_HT_Bad,1_HT_Esszimmer,1_WT_Esszimmer,2_FK_Bad,2_HT_Bad,2_HT_Esszimmer,2_HT_Wohnzimmer,2_WT_Bad,2_WT_Wohnzimmer,3_HT_Kueche,3_HT_WohnSchlaf,ECO_Taster,Hanswurst,MAX_014dc8,MAX_017cf6,MAX_01809d,MAX_019728,MAX_0c8688,MAX_0e0fe4,MAX_0ff9d3,MAX_222222,MAX_Stecker,MAX_Stecker2,MAX_def,TEST_EcoTaster,Test_HT,Test_WT,Thermo1,Thermo3,Thermo_Basic,WT_2_Schlaf,WT_Buero,WT_Test,WT_neu,WandThermo,all,cube,fake_FK,kkkkk,la,lala,test,vFK_1,vFK_3,vWT associate:MAX_07922a,Test_HT,Test_WT deassociate:MAX_07922a,Test_HT,Test_WT restoreDevice:Test_FK,1_HT_Bad,1_HT_Esszimmer,1_WT_Esszimmer,2_FK_Bad,2_HT_Bad,2_HT_Esszimmer,2_HT_Wohnzimmer,2_WT_Bad,2_WT_Wohnzimmer,3_HT_Kueche,3_HT_WohnSchlaf,ECO_Taster,Hanswurst,MAX_014dc8,MAX_017cf6,MAX_01809d,MAX_019728,MAX_0c8688,MAX_0e0fe4,MAX_0ff9d3,MAX_222222,MAX_Stecker,MAX_Stecker2,MAX_def,TEST_EcoTaster,Test_HT,Test_WT,Thermo1,Thermo3,Thermo_Basic,WT_2_Schlaf,WT_Buero,WT_Test,WT_neu,WandThermo,all,cube,fake_FK,kkkkk,la,lala,test,vFK_1,vFK_3,vWT attrTemplate:?,MAX_ShutterContact_dark",
    "PossibleAttrs":"alias comment:textField-long eventMap:textField-long group room suppressReading userReadings:textField-long verbose:0,1,2,3,4,5 IODev CULdev actCycle do_not_notify:1,0 ignore:0,1 dummy:0,1 keepAuto:0,1 debug:0,1 scanTemp:0,1 skipDouble:0,1 externalSensor delay_open delay_close peers sendMode:peers,group,Broadcast model:Cube,HeatingThermostat,HeatingThermostatPlus,WallMountedThermostat,ShutterContact,PushButton,PlugAdapter,virtualShutterContact,virtualThermostat autosaveConfig:0,1 dTempCheck:0,1 windowOpenCheck:0,1 DbLog_log_onoff:0,1 autoselectCUL:0,1 event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading DbLogExclude DbLogInclude DbLogValueFn:textField-long appOptions:textField-long cmdIcon devStateIcon devStateIcon:textField-long devStateStyle icon readingsWatcher sortby webCmd webCmdLabel:textField-long widgetOverride userattr",
    "Internals": {
      ".FhemMetaInternals": "1",
      ".count": "-80",
      ".sendToAddr": "0c8688",
      ".sendToName": "Test_HT",
      ".timer": "60",
      "DEF": "ShutterContact 0ff9d3",
      "FUUID": "5ed68c90-f33f-5b1a-47d2-559beda4f9348587",
      "LASTInputDev": "cm",
      "MSGCNT": "15",
      "NAME": "Test_FK",
      "NOTIFYDEV": "global",
      "NR": "177",
      "NTFY_ORDER": "50-Test_FK",
      "STATE": "1\nok",
      "SVN": "BETA_28032021",
      "TESTT": "null",
      "TYPE": "MAX",
      "addr": "0ff9d3",
      "cm_MSGCNT": "15",
      "cm_TIME": "2021-04-10 18:16:47",
      "devtype": "4",
      "type": "ShutterContact"
    },
    "Readings": {
      ".associatedWith": { "Value":"Test_HT,Test_WT", "Time":"2021-04-10 18:16:47" },
      ".isToMe": { "Value":"0", "Time":"2021-04-10 18:16:47" },
      ".lastact": { "Value":"1618071407", "Time":"2021-04-10 18:16:47" },
      "CUL1st": { "Value":"CUL -48.2", "Time":"2021-04-10 18:16:47" },
      "CUL2_RSSI": { "Value":"-82", "Time":"2021-04-10 18:16:47" },
      "CUL2nd": { "Value":"CUL2 -80.7", "Time":"2021-04-10 18:16:47" },
      "CUL_RSSI": { "Value":"-44.5", "Time":"2021-04-10 18:16:47" },
      "RSSI": { "Value":"-44.5", "Time":"2021-04-10 18:16:47" },
      "battery": { "Value":"ok", "Time":"2021-04-10 18:16:47" },
      "batteryState": { "Value":"ok", "Time":"2021-04-10 18:16:47" },
      "onoff": { "Value":"1", "Time":"2021-04-10 18:16:47" },
      "peerIDs": { "Value":"0c8688,0e0fe4", "Time":"2021-04-10 18:16:47" },
      "peerList": { "Value":"Test_HT,Test_WT", "Time":"2021-04-10 18:16:47" },
      "rferror": { "Value":"1", "Time":"2021-04-10 18:16:47" },
      "sendTo_Test_HT": { "Value":"15", "Time":"2021-04-10 18:16:47" },
      "sendTo_Test_WT": { "Value":"3", "Time":"2021-04-10 18:15:59" },
      "state": { "Value":"opened (rf error)", "Time":"2021-04-10 18:16:47" },
      "windowOpen": { "Value":"00:41", "Time":"2021-04-10 18:57:48" }
    },
    "Attributes": {
      "CULdev": "CUL",
      "IODev": "cm",
      "appOptions": "{\"template\": \"contact\"}",
      "comment": "Configured using template MAX_ShutterContact_1",
      "debug": "1",
      "devStateIcon": "0:fts_window_1w 1:fts_window_1w_open ok:measure_battery_100@005F00 low:measure_battery_0@red",
      "event-on-change-reading": ".*",
      "icon": "hm-sec-win",
      "model": "ShutterContact",
      "room": "MAX",
      "stateFormat": "onoff\nbattery",
      "verbose": "3"
    }
  }  ],
  "totalResultsReturned":1
}

Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

jemu75

Zitat von: Wzut am 10 April 2021, 19:04:07
mir ist zwar unklar welche tiefgreifenden Erkentnisse ein jsonlist2 von einem simplen Reading das nur "0" oder "1" sein kann bringen soll,
aber des Menschen Wille ist sein Himmelreich :
{
  "Arg":"NAME=Test_FK",
  "Results": [
  {
    "Name":"Test_FK",
    "PossibleSets":"saveConfig wakeUp:noArg factoryReset:noArg groupid deviceRename restoreReadings:Test_FK,1_HT_Bad,1_HT_Esszimmer,1_WT_Esszimmer,2_FK_Bad,2_HT_Bad,2_HT_Esszimmer,2_HT_Wohnzimmer,2_WT_Bad,2_WT_Wohnzimmer,3_HT_Kueche,3_HT_WohnSchlaf,ECO_Taster,Hanswurst,MAX_014dc8,MAX_017cf6,MAX_01809d,MAX_019728,MAX_0c8688,MAX_0e0fe4,MAX_0ff9d3,MAX_222222,MAX_Stecker,MAX_Stecker2,MAX_def,TEST_EcoTaster,Test_HT,Test_WT,Thermo1,Thermo3,Thermo_Basic,WT_2_Schlaf,WT_Buero,WT_Test,WT_neu,WandThermo,all,cube,fake_FK,kkkkk,la,lala,test,vFK_1,vFK_3,vWT associate:MAX_07922a,Test_HT,Test_WT deassociate:MAX_07922a,Test_HT,Test_WT restoreDevice:Test_FK,1_HT_Bad,1_HT_Esszimmer,1_WT_Esszimmer,2_FK_Bad,2_HT_Bad,2_HT_Esszimmer,2_HT_Wohnzimmer,2_WT_Bad,2_WT_Wohnzimmer,3_HT_Kueche,3_HT_WohnSchlaf,ECO_Taster,Hanswurst,MAX_014dc8,MAX_017cf6,MAX_01809d,MAX_019728,MAX_0c8688,MAX_0e0fe4,MAX_0ff9d3,MAX_222222,MAX_Stecker,MAX_Stecker2,MAX_def,TEST_EcoTaster,Test_HT,Test_WT,Thermo1,Thermo3,Thermo_Basic,WT_2_Schlaf,WT_Buero,WT_Test,WT_neu,WandThermo,all,cube,fake_FK,kkkkk,la,lala,test,vFK_1,vFK_3,vWT attrTemplate:?,MAX_ShutterContact_dark",
    "PossibleAttrs":"alias comment:textField-long eventMap:textField-long group room suppressReading userReadings:textField-long verbose:0,1,2,3,4,5 IODev CULdev actCycle do_not_notify:1,0 ignore:0,1 dummy:0,1 keepAuto:0,1 debug:0,1 scanTemp:0,1 skipDouble:0,1 externalSensor delay_open delay_close peers sendMode:peers,group,Broadcast model:Cube,HeatingThermostat,HeatingThermostatPlus,WallMountedThermostat,ShutterContact,PushButton,PlugAdapter,virtualShutterContact,virtualThermostat autosaveConfig:0,1 dTempCheck:0,1 windowOpenCheck:0,1 DbLog_log_onoff:0,1 autoselectCUL:0,1 event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading DbLogExclude DbLogInclude DbLogValueFn:textField-long appOptions:textField-long cmdIcon devStateIcon devStateIcon:textField-long devStateStyle icon readingsWatcher sortby webCmd webCmdLabel:textField-long widgetOverride userattr",
    "Internals": {
      ".FhemMetaInternals": "1",
      ".count": "-80",
      ".sendToAddr": "0c8688",
      ".sendToName": "Test_HT",
      ".timer": "60",
      "DEF": "ShutterContact 0ff9d3",
      "FUUID": "5ed68c90-f33f-5b1a-47d2-559beda4f9348587",
      "LASTInputDev": "cm",
      "MSGCNT": "15",
      "NAME": "Test_FK",
      "NOTIFYDEV": "global",
      "NR": "177",
      "NTFY_ORDER": "50-Test_FK",
      "STATE": "1\nok",
      "SVN": "BETA_28032021",
      "TESTT": "null",
      "TYPE": "MAX",
      "addr": "0ff9d3",
      "cm_MSGCNT": "15",
      "cm_TIME": "2021-04-10 18:16:47",
      "devtype": "4",
      "type": "ShutterContact"
    },
    "Readings": {
      ".associatedWith": { "Value":"Test_HT,Test_WT", "Time":"2021-04-10 18:16:47" },
      ".isToMe": { "Value":"0", "Time":"2021-04-10 18:16:47" },
      ".lastact": { "Value":"1618071407", "Time":"2021-04-10 18:16:47" },
      "CUL1st": { "Value":"CUL -48.2", "Time":"2021-04-10 18:16:47" },
      "CUL2_RSSI": { "Value":"-82", "Time":"2021-04-10 18:16:47" },
      "CUL2nd": { "Value":"CUL2 -80.7", "Time":"2021-04-10 18:16:47" },
      "CUL_RSSI": { "Value":"-44.5", "Time":"2021-04-10 18:16:47" },
      "RSSI": { "Value":"-44.5", "Time":"2021-04-10 18:16:47" },
      "battery": { "Value":"ok", "Time":"2021-04-10 18:16:47" },
      "batteryState": { "Value":"ok", "Time":"2021-04-10 18:16:47" },
      "onoff": { "Value":"1", "Time":"2021-04-10 18:16:47" },
      "peerIDs": { "Value":"0c8688,0e0fe4", "Time":"2021-04-10 18:16:47" },
      "peerList": { "Value":"Test_HT,Test_WT", "Time":"2021-04-10 18:16:47" },
      "rferror": { "Value":"1", "Time":"2021-04-10 18:16:47" },
      "sendTo_Test_HT": { "Value":"15", "Time":"2021-04-10 18:16:47" },
      "sendTo_Test_WT": { "Value":"3", "Time":"2021-04-10 18:15:59" },
      "state": { "Value":"opened (rf error)", "Time":"2021-04-10 18:16:47" },
      "windowOpen": { "Value":"00:41", "Time":"2021-04-10 18:57:48" }
    },
    "Attributes": {
      "CULdev": "CUL",
      "IODev": "cm",
      "appOptions": "{\"template\": \"contact\"}",
      "comment": "Configured using template MAX_ShutterContact_1",
      "debug": "1",
      "devStateIcon": "0:fts_window_1w 1:fts_window_1w_open ok:measure_battery_100@005F00 low:measure_battery_0@red",
      "event-on-change-reading": ".*",
      "icon": "hm-sec-win",
      "model": "ShutterContact",
      "room": "MAX",
      "stateFormat": "onoff\nbattery",
      "verbose": "3"
    }
  }  ],
  "totalResultsReturned":1
}


Mir ging es um die Struktur des Devices. Aber danke dafür.  8)

Benni

Zitat von: jemu75 am 10 April 2021, 18:28:15
Gern,

im Normalfall verbindest du ein Template immer mit genau einem Device. Somit kannst du erstmal alle Readings/Internals/Attribute von diesem "abgreifen" und im Standard Template verwenden. Wenn du jedoch komplexere Templates erstellen möchtest, die Daten aus unterschiedlichen Devices darstellen sollen, dann kommt connected zum Einsatz. Das bietet sich z.B. bei Thermostaten an, wenn ich im Template zusätzlich sehen möchte, was das zugehörige Heizungsventil macht. Oder wenn, wie bei Homematic-Thermostaten, mehrere Kanäle vorhanden sind.

Mit dem Parameter connected definierst du in appOptions also die Devices, die du noch im Template benötigst. die Angabe erfolgt immer mit "<name>": "<device>". name ist ein von dir gewählter Name, über den du später in der Templatedefinition auf dieses "Kind-Device" zugreifen kannst. Wie du das genau machst, erkläre ich gleich. der "connected-Teil" in appOptions könnte damit wie folgt aussehen:
"connected": { "ventil": "fhem.heizung.ventil.wohnzimmer", "empfängerkanal": "fhem.thermostate.wohnzimmer.empfänger" } 

Wenn du jetzt mehrere Devices in einem Template hast, würden ja "Dopplungen" von Readings/Internals/Attributen entstehen. Damit du nun bei der Zuweisung auf das richtige Reading zugreifst, muss deine Wertzuweisung das Reading genauer spezifiziert werden, indem du den kompletten "JSon-Objectpfad" angibst. Im o.g. Beispiel wäre das dann z.B.
["Connected.ventil.Readings.state.Value"]
Wichtig: in der appOptions-Definition wird der Parameter "connected" klein geschrieben. Im "JSon-Object" musst du "Connected" schreiben.

Ich denke deutlich wird das Prinzip auch noch mal wenn du den DebugModus aktivierst und dann mal auf {...} oben rechts im Standard-Template klickst. Dann wird das komplette JSon-Obejct mit allen verfügbaren Elementen angezeigt.

Soweit ein kurzer Crashkurs zum Thema "connected"  :)

Das ist genau so, wie ich mir das erhofft hatte! ;D

Bisher habe ich mir etwaige zusätzliche Readings oder Infos aus anderen Devices per userreading oder per notify in das jeweilige device geholt, bzw pushen lassen. So ist es natürlich viel einfacher :)

Und der Debug-Modus ist jetzt schon Gold wert!

Danke!

Gruß Benni

hydrotec

Guten Abend @all

So, hab mich etwas mit fhemApp und HUEDevices beschäftigt.
Erst einmal nur lights und plugs.
Das Beispiel, hier Büro Deckenlampe, ist noch nicht komplett ausgereift, aber funktionabel.

Die HUEDevices und HUEGroups müsst ihr an eure Umgebung anpassen.
Ebenso die scenes. (siehe Punkt 6.)


Zum besseren Verständnis wie meine HUE Umgebung aussieht.

Bei mir ist HUE über die HUEBridge in Fhem eingebunden.
Meine Zimmer habe ich in verschiedene Bereiche aufgeteilt (HUE zone).
Dort dann die entsprechenden Lampen,Bewegungsmelder,usw. (HUEDevice) hinzugefügt.
Dann diese Zonen in das Zimmer gelegt (HUEGroup).

Ok, dann mal ran an den Speck  ;D


Benötigte Devices

1.a) Die Lampe (HUEDevice)

defmod HUEDevice11 HUEDevice 11  IODev=hue_bridge_01
attr HUEDevice11 DbLogExclude .*
attr HUEDevice11 IODev hue_bridge_01
attr HUEDevice11 alias hue_light_ph_gu10_05
attr HUEDevice11 appOptions {\
"template": "hue_light_switch_bri",\
"name": "hue_light_ph_gu10_05",\
"room": "07_Hue",\
"group": "zone_office_ceiling",\
"sortby": "070305",\
"home": false,\
"dashboard": false,\
"system": false\
}
attr HUEDevice11 color-icons 2
attr HUEDevice11 devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
attr HUEDevice11 group group_office,zone_office_ceiling
attr HUEDevice11 model LTW013
attr HUEDevice11 room 00_Wohnung->Büro,07_Hue->Light
attr HUEDevice11 subType ctdimmer
attr HUEDevice11 webCmd ct:ct 490:ct 380:ct 270:ct 160:toggle:on:off


1.b) Die Steckdose (HUEDevice)

defmod HUEDevice27 HUEDevice 27  IODev=hue_bridge_01
attr HUEDevice27 DbLogExclude .*
attr HUEDevice27 IODev hue_bridge_01
attr HUEDevice27 alias hue_light_ph_plug_06
attr HUEDevice27 appOptions {\
"template": "hue_plug_switch",\
"name": "hue_light_ph_plug_06",\
"room": "07_Hue",\
"group": "zone_bedroom_general",\
"sortby": "070406",\
"home": false,\
"dashboard": false,\
"system": false\
}
attr HUEDevice27 color-icons 2
attr HUEDevice27 devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
attr HUEDevice27 group group_bedroom,zone_bedroom_general
attr HUEDevice27 model LOM001
attr HUEDevice27 room 00_Wohnung->Schlafzimmer,07_Hue->Plug
attr HUEDevice27 subType switch
attr HUEDevice27 webCmd toggle:on:off


2.) Die Zone (HUEGroup)

defmod HUEGroup22 HUEDevice group 22  IODev=hue_bridge_01
attr HUEGroup22 userattr createActionReadings:1,0 createGroupReadings:1,0
attr HUEGroup22 DbLogExclude .*
attr HUEGroup22 IODev hue_bridge_01
attr HUEGroup22 alias z_office_ceiling
attr HUEGroup22 appOptions {\
"template": "hue_zone_switch",\
"name": "z_office_ceiling",\
"room": "07_Hue",\
"group": "zone_office_ceiling",\
"sortby": "070202",\
"home": false,\
"dashboard": false,\
"system": false,\
"connected": {\
"du_scenes": "du_office_ceiling_scenes"\
},\
"setup": {\
"main": [\
{\
"leftBtn": "mdi-dots-vertical",\
"leftMenu": [\
"Energie tanken:set du_office_ceiling_scenes Energie.tanken",\
"Entspannen:set du_office_ceiling_scenes Entspannen",\
"Frühlingsblüten:set du_office_ceiling_scenes Frühlingsblüten",\
"Gedimmt:set du_office_ceiling_scenes Gedimmt",\
"Hell:set du_office_ceiling_scenes Hell",\
"Konzentrieren:set du_office_ceiling_scenes Konzentrieren",\
"Lesen:set du_office_ceiling_scenes Lesen",\
"Nachtlicht:set du_office_ceiling_scenes Nachtlicht",\
"Nordlichter:set du_office_ceiling_scenes Nordlichter",\
"Sonnenuntergang Savanne:set du_office_ceiling_scenes Sonnenuntergang.Savanne",\
"Tropendämmerung:set du_office_ceiling_scenes Tropendämmerung"\
],\
"text": [\
"Connected.du_scenes.Readings.state.Value::%s"\
],\
"text2": [\
"all_on:1:an",\
"all_on:0:aus",\
"all_on::%s"\
],\
"rightBtn": "mdi-power",\
"rightClick": [\
"all_on:1:off",\
"all_on:0:on"\
]\
}\
]\
},\
"panel": {\
"status": [\
"all_on:1:an:100:success",\
"all_on:0:aus:0:success"\
],\
"btn": "mdi-chevron-right",\
"link": "/devices/group=zone_office_ceiling"\
}\
}
attr HUEGroup22 color-icons 2
attr HUEGroup22 delayedUpdate 1
attr HUEGroup22 devStateIcon .*:noIcon
attr HUEGroup22 eventMap 0:0 1:1
attr HUEGroup22 group zone_office_ceiling
attr HUEGroup22 room 00_Wohnung->Büro,07_Hue->Zone
attr HUEGroup22 stateFormat all_on


3.) Die Gruppe (HUEGroup)

defmod HUEGroup6 HUEDevice group 6  IODev=hue_bridge_01
attr HUEGroup6 userattr createActionReadings:1,0 createGroupReadings:1,0
attr HUEGroup6 DbLogExclude .*
attr HUEGroup6 IODev hue_bridge_01
attr HUEGroup6 alias g_office
attr HUEGroup6 appOptions {\
"template": "panel",\
"name": "Büro",\
"room": "07_Hue",\
"group": "zone_apartment_light",\
"sortby": "070106",\
"home": false,\
"dashboard": false,\
"system": false,\
"connected": {\
"z_office_ambience": "HUEGroup21",\
"z_office_ceiling": "HUEGroup22",\
"z_office_general": "HUEGroup23"\
},\
"setup": {\
"status": {\
"bar": [\
"all_on:1:100:success",\
"any_on:1:50:success",\
"all_on:0:0:success"\
],\
"error": []\
},\
"info": {\
"left1": [\
"Internals.STATE:::mdi-lightbulb-outline"\
]\
}\
},\
"panel": {\
"status": [\
"all_on:1:an:100:success",\
"any_on:1:teilweise an:50:success",\
"all_on:0:aus:0:success"\
],\
"btn": "mdi-chevron-right",\
"link": "/devices/group=zone_apartment_light"\
}\
}
attr HUEGroup6 color-icons 2
attr HUEGroup6 delayedUpdate 1
attr HUEGroup6 devStateIcon .*:noIcon
attr HUEGroup6 eventMap 0:0 1:1
attr HUEGroup6 group group_office
attr HUEGroup6 room 00_Wohnung->Büro,07_Hue->Group
attr HUEGroup6 stateFormat any_on
attr HUEGroup6 webCmd :


4.) Panel Übersicht (dummy)

defmod du_panel_licht_general dummy
attr du_panel_licht_general DbLogExclude .*
attr du_panel_licht_general appOptions {\
"template": "panel",\
"name": "Licht",\
"room": "07_Hue",\
"group": "zone_apartment_general",\
"sortby": "070001",\
"home": true,\
"dashboard": false,\
"system": false,\
"connected": {\
"Bad": "HUEGroup5",\
"Schlafzimmer": "HUEGroup13",\
"Flur": "HUEGroup2",\
"Küche": "HUEGroup1",\
"Wohnzimmer": "HUEGroup11",\
"Büro": "HUEGroup6",\
"Toilette": "HUEGroup10"\
},\
"setup": {\
"size": "col-12 col-sm-6 col-md-4 col-lg-4",\
"status": {\
"btn": "mdi-chevron-right"\
},\
"info": {\
"left1": [\
"Internals.STATE:::mdi-lightbulb-outline"\
]\
}\
}\
}
attr du_panel_licht_general room 97_FhemApp->dummy



5.) Scenen schalten (dummy)

defmod du_office_ceiling_scenes dummy
attr du_office_ceiling_scenes DbLogExclude .*
attr du_office_ceiling_scenes group zone_office_ceiling
attr du_office_ceiling_scenes room 00_Wohnung->Büro,97_FhemApp->dummy
attr du_office_ceiling_scenes setList state:Energie.tanken,Entspannen,Frühlingsblüten,Gedimmt,Hell,Konzentrieren,Lesen,Nachtlicht,Nordlichter,Sonnenuntergang.Savanne,Tropendämmerung
attr du_office_ceiling_scenes webCmd state




6.) Scenen schalten (notify)

defmod n_office_ceiling_scenes notify du_office_ceiling_scenes { \
    my $cmd = "HUEGroup22 off";; \
    $cmd = "scene 1Y-UqMy56MgdINk" if ($EVENT eq "Energie.tanken");; \
    $cmd = "scene QNbhwAY1opRzC2-" if ($EVENT eq "Entspannen");; \
    $cmd = "scene 3n6edGS9EAS67bK" if ($EVENT eq "Frühlingsblüten");; \
    $cmd = "scene vk4BX5EUH5ppLiD" if ($EVENT eq "Gedimmt");; \
    $cmd = "scene PONpFGevUwkN8x7" if ($EVENT eq "Hell");; \
    $cmd = "scene Ip1LbQi4gAnAwoQ" if ($EVENT eq "Konzentrieren");; \
    $cmd = "scene -8jEX4hZc93vWq5" if ($EVENT eq "Lesen");; \
    $cmd = "scene C6DpvEzrd4A7v88" if ($EVENT eq "Nachtlicht");; \
    $cmd = "scene 4DFuuFv4z81OoN2" if ($EVENT eq "Nordlichter");; \
    $cmd = "scene E505LCvi0OTLv25" if ($EVENT eq "Sonnenuntergang.Savanne");; \
    $cmd = "scene kICgpyiTTqctPRA" if ($EVENT eq "Tropendämmerung");; \
    fhem "set HUEGroup22 $cmd";; \
}
attr n_office_ceiling_scenes DbLogExclude .*
attr n_office_ceiling_scenes group zone_office_ceiling
attr n_office_ceiling_scenes room 00_Wohnung->Büro,97_FhemApp->notify



7.) Zusätzlich folgende Templates
- templ_hue_light_switch_bri.json
- templ_hue_plug_switch.json
- templ_hue_zone_switch.json

8.) Anschauen und genießen  ;)
- screenshots (Firefox Vollbild)


Bei Fragen oder Anregungen gerne melden.

Viel Spaß damit  :)
Gruß, Karsten

jemu75

Zitat von: Benni am 10 April 2021, 20:53:12
Das ist genau so, wie ich mir das erhofft hatte! ;D

Bisher habe ich mir etwaige zusätzliche Readings oder Infos aus anderen Devices per userreading oder per notify in das jeweilige device geholt, bzw pushen lassen. So ist es natürlich viel einfacher :)

Und der Debug-Modus ist jetzt schon Gold wert!

Danke!

Gruß Benni

Cool, ich habe damals auch viel mit userreadings gearbeitet und war nicht ganz so glücklich damit. connected war die Lösung die dabei rausgekommen ist.  :) Letztlich habe ich den Ansatz dann ja auch auf die Panels angewendet. Na dann weiterhin viel Spaß beim Probieren.

Benni

Zitat von: jemu75 am 10 April 2021, 18:28:15
Soweit ein kurzer Crashkurs zum Thema "connected"  :)

Kann man so ein, per connected eingebundenes Device auch schalten?

jemu75

Zitat von: hydrotec am 10 April 2021, 21:11:25
Guten Abend @all

So, hab mich etwas mit fhemApp und HUEDevices beschäftigt.
Erst einmal nur lights und plugs.
Das Beispiel, hier Büro Deckenlampe, ist noch nicht komplett ausgereift, aber funktionabel.

Die HUEDevices und HUEGroups müsst ihr an eure Umgebung anpassen.
Ebenso die scenes. (siehe Punkt 6.)


Zum besseren Verständnis wie meine HUE Umgebung aussieht.

Bei mir ist HUE über die HUEBridge in Fhem eingebunden.
Meine Zimmer habe ich in verschiedene Bereiche aufgeteilt (HUE zone).
Dort dann die entsprechenden Lampen,Bewegungsmelder,usw. (HUEDevice) hinzugefügt.
Dann diese Zonen in das Zimmer gelegt (HUEGroup).

Ok, dann mal ran an den Speck  ;D


Benötigte Devices

1.a) Die Lampe (HUEDevice)

defmod HUEDevice11 HUEDevice 11  IODev=hue_bridge_01
attr HUEDevice11 DbLogExclude .*
attr HUEDevice11 IODev hue_bridge_01
attr HUEDevice11 alias hue_light_ph_gu10_05
attr HUEDevice11 appOptions {\
"template": "hue_light_switch_bri",\
"name": "hue_light_ph_gu10_05",\
"room": "07_Hue",\
"group": "zone_office_ceiling",\
"sortby": "070305",\
"home": false,\
"dashboard": false,\
"system": false\
}
attr HUEDevice11 color-icons 2
attr HUEDevice11 devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
attr HUEDevice11 group group_office,zone_office_ceiling
attr HUEDevice11 model LTW013
attr HUEDevice11 room 00_Wohnung->Büro,07_Hue->Light
attr HUEDevice11 subType ctdimmer
attr HUEDevice11 webCmd ct:ct 490:ct 380:ct 270:ct 160:toggle:on:off


1.b) Die Steckdose (HUEDevice)

defmod HUEDevice27 HUEDevice 27  IODev=hue_bridge_01
attr HUEDevice27 DbLogExclude .*
attr HUEDevice27 IODev hue_bridge_01
attr HUEDevice27 alias hue_light_ph_plug_06
attr HUEDevice27 appOptions {\
"template": "hue_plug_switch",\
"name": "hue_light_ph_plug_06",\
"room": "07_Hue",\
"group": "zone_bedroom_general",\
"sortby": "070406",\
"home": false,\
"dashboard": false,\
"system": false\
}
attr HUEDevice27 color-icons 2
attr HUEDevice27 devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
attr HUEDevice27 group group_bedroom,zone_bedroom_general
attr HUEDevice27 model LOM001
attr HUEDevice27 room 00_Wohnung->Schlafzimmer,07_Hue->Plug
attr HUEDevice27 subType switch
attr HUEDevice27 webCmd toggle:on:off


2.) Die Zone (HUEGroup)

defmod HUEGroup22 HUEDevice group 22  IODev=hue_bridge_01
attr HUEGroup22 userattr createActionReadings:1,0 createGroupReadings:1,0
attr HUEGroup22 DbLogExclude .*
attr HUEGroup22 IODev hue_bridge_01
attr HUEGroup22 alias z_office_ceiling
attr HUEGroup22 appOptions {\
"template": "hue_zone_switch",\
"name": "z_office_ceiling",\
"room": "07_Hue",\
"group": "zone_office_ceiling",\
"sortby": "070202",\
"home": false,\
"dashboard": false,\
"system": false,\
"connected": {\
"du_scenes": "du_office_ceiling_scenes"\
},\
"setup": {\
"main": [\
{\
"leftBtn": "mdi-dots-vertical",\
"leftMenu": [\
"Energie tanken:set du_office_ceiling_scenes Energie.tanken",\
"Entspannen:set du_office_ceiling_scenes Entspannen",\
"Frühlingsblüten:set du_office_ceiling_scenes Frühlingsblüten",\
"Gedimmt:set du_office_ceiling_scenes Gedimmt",\
"Hell:set du_office_ceiling_scenes Hell",\
"Konzentrieren:set du_office_ceiling_scenes Konzentrieren",\
"Lesen:set du_office_ceiling_scenes Lesen",\
"Nachtlicht:set du_office_ceiling_scenes Nachtlicht",\
"Nordlichter:set du_office_ceiling_scenes Nordlichter",\
"Sonnenuntergang Savanne:set du_office_ceiling_scenes Sonnenuntergang.Savanne",\
"Tropendämmerung:set du_office_ceiling_scenes Tropendämmerung"\
],\
"text": [\
"Connected.du_scenes.Readings.state.Value::%s"\
],\
"text2": [\
"all_on:1:an",\
"all_on:0:aus",\
"all_on::%s"\
],\
"rightBtn": "mdi-power",\
"rightClick": [\
"all_on:1:off",\
"all_on:0:on"\
]\
}\
]\
},\
"panel": {\
"status": [\
"all_on:1:an:100:success",\
"all_on:0:aus:0:success"\
],\
"btn": "mdi-chevron-right",\
"link": "/devices/group=zone_office_ceiling"\
}\
}
attr HUEGroup22 color-icons 2
attr HUEGroup22 delayedUpdate 1
attr HUEGroup22 devStateIcon .*:noIcon
attr HUEGroup22 eventMap 0:0 1:1
attr HUEGroup22 group zone_office_ceiling
attr HUEGroup22 room 00_Wohnung->Büro,07_Hue->Zone
attr HUEGroup22 stateFormat all_on


3.) Die Gruppe (HUEGroup)

defmod HUEGroup6 HUEDevice group 6  IODev=hue_bridge_01
attr HUEGroup6 userattr createActionReadings:1,0 createGroupReadings:1,0
attr HUEGroup6 DbLogExclude .*
attr HUEGroup6 IODev hue_bridge_01
attr HUEGroup6 alias g_office
attr HUEGroup6 appOptions {\
"template": "panel",\
"name": "Büro",\
"room": "07_Hue",\
"group": "zone_apartment_light",\
"sortby": "070106",\
"home": false,\
"dashboard": false,\
"system": false,\
"connected": {\
"z_office_ambience": "HUEGroup21",\
"z_office_ceiling": "HUEGroup22",\
"z_office_general": "HUEGroup23"\
},\
"setup": {\
"status": {\
"bar": [\
"all_on:1:100:success",\
"any_on:1:50:success",\
"all_on:0:0:success"\
],\
"error": []\
},\
"info": {\
"left1": [\
"Internals.STATE:::mdi-lightbulb-outline"\
]\
}\
},\
"panel": {\
"status": [\
"all_on:1:an:100:success",\
"any_on:1:teilweise an:50:success",\
"all_on:0:aus:0:success"\
],\
"btn": "mdi-chevron-right",\
"link": "/devices/group=zone_apartment_light"\
}\
}
attr HUEGroup6 color-icons 2
attr HUEGroup6 delayedUpdate 1
attr HUEGroup6 devStateIcon .*:noIcon
attr HUEGroup6 eventMap 0:0 1:1
attr HUEGroup6 group group_office
attr HUEGroup6 room 00_Wohnung->Büro,07_Hue->Group
attr HUEGroup6 stateFormat any_on
attr HUEGroup6 webCmd :


4.) Panel Übersicht (dummy)

defmod du_panel_licht_general dummy
attr du_panel_licht_general DbLogExclude .*
attr du_panel_licht_general appOptions {\
"template": "panel",\
"name": "Licht",\
"room": "07_Hue",\
"group": "zone_apartment_general",\
"sortby": "070001",\
"home": true,\
"dashboard": false,\
"system": false,\
"connected": {\
"Bad": "HUEGroup5",\
"Schlafzimmer": "HUEGroup13",\
"Flur": "HUEGroup2",\
"Küche": "HUEGroup1",\
"Wohnzimmer": "HUEGroup11",\
"Büro": "HUEGroup6",\
"Toilette": "HUEGroup10"\
},\
"setup": {\
"size": "col-12 col-sm-6 col-md-4 col-lg-4",\
"status": {\
"btn": "mdi-chevron-right"\
},\
"info": {\
"left1": [\
"Internals.STATE:::mdi-lightbulb-outline"\
]\
}\
}\
}
attr du_panel_licht_general room 97_FhemApp->dummy



5.) Scenen schalten (dummy)

defmod du_office_ceiling_scenes dummy
attr du_office_ceiling_scenes DbLogExclude .*
attr du_office_ceiling_scenes group zone_office_ceiling
attr du_office_ceiling_scenes room 00_Wohnung->Büro,97_FhemApp->dummy
attr du_office_ceiling_scenes setList state:Energie.tanken,Entspannen,Frühlingsblüten,Gedimmt,Hell,Konzentrieren,Lesen,Nachtlicht,Nordlichter,Sonnenuntergang.Savanne,Tropendämmerung
attr du_office_ceiling_scenes webCmd state




6.) Scenen schalten (notify)

defmod n_office_ceiling_scenes notify du_office_ceiling_scenes { \
    my $cmd = "HUEGroup22 off";; \
    $cmd = "scene 1Y-UqMy56MgdINk" if ($EVENT eq "Energie.tanken");; \
    $cmd = "scene QNbhwAY1opRzC2-" if ($EVENT eq "Entspannen");; \
    $cmd = "scene 3n6edGS9EAS67bK" if ($EVENT eq "Frühlingsblüten");; \
    $cmd = "scene vk4BX5EUH5ppLiD" if ($EVENT eq "Gedimmt");; \
    $cmd = "scene PONpFGevUwkN8x7" if ($EVENT eq "Hell");; \
    $cmd = "scene Ip1LbQi4gAnAwoQ" if ($EVENT eq "Konzentrieren");; \
    $cmd = "scene -8jEX4hZc93vWq5" if ($EVENT eq "Lesen");; \
    $cmd = "scene C6DpvEzrd4A7v88" if ($EVENT eq "Nachtlicht");; \
    $cmd = "scene 4DFuuFv4z81OoN2" if ($EVENT eq "Nordlichter");; \
    $cmd = "scene E505LCvi0OTLv25" if ($EVENT eq "Sonnenuntergang.Savanne");; \
    $cmd = "scene kICgpyiTTqctPRA" if ($EVENT eq "Tropendämmerung");; \
    fhem "set HUEGroup22 $cmd";; \
}
attr n_office_ceiling_scenes DbLogExclude .*
attr n_office_ceiling_scenes group zone_office_ceiling
attr n_office_ceiling_scenes room 00_Wohnung->Büro,97_FhemApp->notify



7.) Zusätzlich folgende Templates
- templ_hue_light_switch_bri.json
- templ_hue_plug_switch.json
- templ_hue_zone_switch.json

8.) Anschauen und genießen  ;)
- screenshots (Firefox Vollbild)


Bei Fragen oder Anregungen gerne melden.

Viel Spaß damit  :)
Gruß, Karsten

Wow, bin platt was du da aufgebaut hast.  :)

Jamo

#669
Zitat von: jemu75 am 09 April 2021, 23:37:38
BITTE MAL UM EUER FEEDBACK

Ihr habt ja in den letzten Wochen sehr fleißig getestet und vielleicht hat der Eine oder Andere schon eine Konfiguration live im Einsatz.  :)

Lasst mich bitte mal wissen, wie ihr mit der Performance der App zufrieden seid. Mich würde hier auch interessieren, wie viele Devices ihr via "appOptions" in die App eingeklinkt habt und auf welcher Hardware FHEM bei euch läuft. Gern auch mal (sofern ihr das schon nutzt) eine Rückmeldung zu den Ladezeiten der Charts geben.

Und wer möchte, kann gern auch mal einen Screenshot hier in die Runde werfen.

Dann vielen Dank schon mal an alle!  :)

Hallo Jens,
sehr gerne hier mein Feedback und auch Daten zur Einordnung. Als Frontend habe ich bisher ausschliesslich FHEMWEB über Browser benutzt, sowohl am PC als auch für die mobilen Devices, das ist meine Messlatte im Vergleich zu fhemapp. Hardware: Intel NUC8i5 mit Debian Buster, als Mobile Devices ausschliesslich iPhone/iPad.

- 682 Devices in FHEM (aus fheminfo).
 
- 60 Devices über AppOptions eingebunden, davon sind aber nur 2 dblog charts, also etwa 9% der FHEM Devices.


Performance:
- Mit der Performance bin ich nicht ganz so zufrieden.
  Gegenüber dem reinen FHEMWEB/Browser dauert es in fhemapp etwa immer 3-5 Sekunden länger, bis beim ersten Aufruf die Home Page angezeigt wird. Beim Seitenwechsel e.g. von Home zum Dashboard in fhemapp braucht es auch etwa 3 Sekunden, wobei beim FHEMWEB Browser ein Wechsel in einen anderen Raum sofort passiert. Dasselbe auch beim Wechsel des Bereiches innerhalb von fhemapp.
  Ich habe keine Ahnung wie fhemapp funktioniert, aber kann es sein das jedesmal ein komplett neues jsonlist2 gemacht wird?

- Auch gibt es innerhalb von fhemapp keinen Refresh button, um einen Refresh zu machen muss man immer die jeweilige Ansicht verlassen, und dann zur Ansicht zurückkehren. Im Browser kann man einfach oben rechts auf den reload Button drücken. Vielleicht kann man eine Reload Funktion in den grünen Punkt integrieren? Oder alternativ gibts bei iOS die Möglichkeit, den Screen nach unten zu ziehen...
 
- Wenn man in fhemapp einen Click auslöst, ist allerdings die Reaktion verzögerungsfrei, also da stimmt die Performance.
 

Screenshots:
- Was ich an fhemapp absolut genial finde, sind die Panels. Panels erlauben eine Gruppierung von zusammengehörigen Devices, wie z.B. bestimmter Schalter (wie bei mir Internet) oder eben aller Fenster über alle Wohnräume hinweg. Allerdings vermisse ich wirklich die Möglichkeit, in die Panels Lampen, Thermostate und Rollos einzubinden, weil man dafür ja 2 Buttons links und rechts benötigt, und im Moment gibt es links nur den Status. Ich weiss das weitere Features/templates im Moment nicht vorgesehen sind, ich habe aber mal versucht, einen Ansatz in verschiedenen Screenshots zu visualisieren. Anbei die Gegenüberstellung der Ansicht bei einzelnen Devices "* Einzeln.jpg" (also das was jetzt geht) versus "*Panel.jpg", also das was ich mir vorstelle.

- Ausserdem habe ich noch 2 Screenshots "Home.jpg" angefügt, wo über das Menü die Weckersteuerung integriert ist, und die Auswahl der Radiosender (Musik hat 2 Ebenen) - gefällt mir super.

Danke nochmal an dieser Stelle für all deine Arbeit und das Du die fhemapp zur Verfügung stellst. Ich habe in kürzester Zeit ein geniales Frontend zusammengebaut, und bin begeistert. Bisher für mich das beste Frontend für mobile Devices!

Beste Grüsse!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

Jamo

Zitat von: jemu75 am 09 April 2021, 23:27:03
Hast du in deinem o.g. Beispiel den tatsächlichen Token durch "abcdefghijklmnopqrs" ersetzt? Aktuell holt sich die App beim Start den csrf Token einmalig und verwendet den dann solange, die App aktiv ist. Bei Verbindungsunterbrechungen (mit erneutem Verbindungsaufbau) wird der csrf-Token ebenfalls neu geholt. Habe mich mit dem csrf-Token bisher nicht in der Tiefe beschäftigt. Kann es sein, dass dieser seitens FHEM häufig geändert werden kann?

Hallo Jens,
ja, da habe ich zu wenig Informationen gegeben: Der csrf Token ist bei mir fest eingestellt, ändert sich also nie. Den csrf token kann man in der FHEMWEB Instanz über attribut fest klemmen, das habe ich auch so gemacht. Ich glaube aber nicht, das es was mit dem Einträgen im Log zu tun hat.
attr WEB csrfToken abcdefghijklmnopqrs
Unten noch 2 weitere Beispiele, die sind definitiv bei Zugriff über Mobile Daten/VPN aufgetreten, das Beispiel von oben bei Zugriff im eigenen WLAN (das sehe ich an der IP Adresse). Insgesamt nicht so wichtig für mich, tritt nur sporadisch auf und man merkt ja in der Regel auch, das ein Befehl nicht angekommen ist, dann clicke ich halt nochmal. Also nur zur Info.

2021.04.09 20:21:03 3: FHEMWEB WEB CSRF error:  ne abcdefghijklmnopqrs for client WEB_MEI.NE.IP.AD_52262 / command jsonlist2 Alexa.PiHole. For details see the csrfToken FHEMWEB attribute.
2021.04.10 10:30:26 3: FHEMWEB WEB CSRF error:  ne abcdefghijklmnopqrs for client WEB_MEI.NE.IP.AD_58127 / command jsonlist2 WLANg. For details see the csrfToken FHEMWEB attribute.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

jemu75

Zitat von: Jamo am 10 April 2021, 21:39:59
Performance:
- Mit der Performance bin ich nicht ganz so zufrieden.
  Gegenüber dem reinen FHEMWEB/Browser dauert es in fhemapp etwa immer 3-5 Sekunden länger, bis beim ersten Aufruf die Home Page angezeigt wird. Beim Seitenwechsel e.g. von Home zum Dashboard in fhemapp braucht es auch etwa 3 Sekunden, wobei beim FHEMWEB Browser ein Wechsel in einen anderen Raum sofort passiert. Dasselbe auch beim Wechsel des Bereiches innerhalb von fhemapp.
  Ich habe keine Ahnung wie fhemapp funktioniert, aber kann es sein das jedesmal ein komplett neues jsonlist2 gemacht wird?

- Auch gibt es innerhalb von fhemapp keinen Refresh button, um einen Refresh zu machen muss man immer die jeweilige Ansicht verlassen, und dann zur Ansicht zurückkehren. Im Browser kann man einfach oben rechts auf den reload Button drücken. Vielleicht kann man eine Reload Funktion in den grünen Punkt integrieren? Oder alternativ gibts bei iOS die Möglichkeit, den Screen nach unten zu ziehen...
 

Danke für dein sehr ausführliches Feedback insbesondere zur Performance. Da ist auf jeden Fall noch Luft nach oben ;)
Zu den Ladezeiten - Es ist tatsächlich so, dass ich inzwischen alle Devices mit dem Attribut appOptions lade was sich leider negativ auf die Ladezeit auswirkt. Hintergrund ist das Handling von "room" und "group" Hier muss ich sowohl die FHEM Attribute als auch die in appOptions hinterlegten Parameter berücksichtigen. Da appOptions eine recht komplexe Struktur ist, kann man diese in FHEM nicht so einfach filtern. Mit den FHEM Attributen geht das deutlich besser.  ;) Ich denke aber auch schon auf dem Thema rum, wie man das künftig besser lösen kann. Letztlich muss ich ja davon ausgehen, dass mal jemand 200 Devices via appOptions einbindet und das ganze auf nem kleinen  Raspi... ;)

Weiterhin passiert bei Android folgendes. Wenn das Display ausgeht, dann wird im Hintergrund der websocket geschlossen. Der Reconnect erfolgt bisher mit einer fest eingebauten Verzögerung von 3 Sekunden. D.h. wenn ich das Smartphone wieder aktiviere, dann wird der websocket erst nach 3 Sekunden wieder geöffnet. Auch den Reconnect kann man sicher noch etwas "intelligenter" bauen.

Zum Thema Refreshbutton würde ich mal provokant fragen, wozu es den braucht. ;) Ich habe die App so gebaut, dass immer alles aktuell sein sollte. Das ist aus meiner Sicht essentiell für "realtime" Anwendungen. Wenn das irgendwo nicht klappt, dann bitte unbedingt Bescheid geben. Bei dem Thema bin ich hartnäckig und das muss klappen - wenn nicht stampfe ich die App ein! ;)  ;D
Eine Ausnahme bildet die Änderung der Konfiguration (appOptions , Anpassungen der Template-Definitionen oder config.json). Hier ist ein Browser Reload nötig.

jemu75

Zitat von: Jamo am 10 April 2021, 22:06:24
Hallo Jens,
ja, da habe ich zu wenig Informationen gegeben: Der csrf Token ist bei mir fest eingestellt, ändert sich also nie. Den csrf token kann man in der FHEMWEB Instanz über attribut fest klemmen, das habe ich auch so gemacht. Ich glaube aber nicht, das es was mit dem Einträgen im Log zu tun hat.
attr WEB csrfToken abcdefghijklmnopqrs
Unten noch 2 weitere Beispiele, die sind definitiv bei Zugriff über Mobile Daten/VPN aufgetreten, das Beispiel von oben bei Zugriff im eigenen WLAN (das sehe ich an der IP Adresse). Insgesamt nicht so wichtig für mich, tritt nur sporadisch auf und man merkt ja in der Regel auch, das ein Befehl nicht angekommen ist, dann clicke ich halt nochmal. Also nur zur Info.

2021.04.09 20:21:03 3: FHEMWEB WEB CSRF error:  ne abcdefghijklmnopqrs for client WEB_MEI.NE.IP.AD_52262 / command jsonlist2 Alexa.PiHole. For details see the csrfToken FHEMWEB attribute.
2021.04.10 10:30:26 3: FHEMWEB WEB CSRF error:  ne abcdefghijklmnopqrs for client WEB_MEI.NE.IP.AD_58127 / command jsonlist2 WLANg. For details see the csrfToken FHEMWEB attribute.


"...in der Regel auch, das ein Befehl nicht angekommen ist, dann clicke ich halt nochmal..." - Also das würde mich ja mega annerven. Hast du schon mal auf nen Lichtschalter gedrückt und das Licht geht erst beim zweiten Mal an.  ;D ;D
In deinem FHEM-Log steht ja "...For details see the crsfToken..." Bekommst du da evtl. noch was genaueres zu raus?
Weiterhin würde mir folgendes helfen. Schalte mal den DebugMode ein und schau mal ob im syslog von FHEMApp Fehler auftauchen.

Benni

Zitat von: jemu75 am 10 April 2021, 23:37:40
Zu den Ladezeiten - Es ist tatsächlich so, dass ich inzwischen alle Devices mit dem Attribut appOptions lade was sich leider negativ auf die Ladezeit auswirkt. Hintergrund ist das Handling von "room" und "group" Hier muss ich sowohl die FHEM Attribute als auch die in appOptions hinterlegten Parameter berücksichtigen. Da appOptions eine recht komplexe Struktur ist, kann man diese in FHEM nicht so einfach filtern. Mit den FHEM Attributen geht das deutlich besser.  ;) Ich denke aber auch schon auf dem Thema rum, wie man das künftig besser lösen kann. Letztlich muss ich ja davon ausgehen, dass mal jemand 200 Devices via appOptions einbindet und das ganze auf nem kleinen  Raspi... ;)

Erst mal die kurze Rückmeldung von mir, dass bei mir die Performance bisher kein Thema ist, obwohl ich bereits >300 Devices mit appOptions-Attribut habe 8)
FHEM und somit auch fhamapp läuft bei mir auf einem Intel(R) Pentium(R) CPU G3220T @ 2.60GHz mit und 8GB RAM.

2 Ideen, Ansätze zu obigem "Problem":

Dass jsonlist2 ein devspec als Parameter hat, der mit FILTER die Liste FHEM-seitig bereits vorfiltern kann, nehme ich an, ist dir bereits bekannt.
Also sowas in der Art:

jsonlist2 appOptions=.+:FILTER=appOptions=.*"group":."Fenster".*


Oder gleich ein eigenes fhemapp-helper-Device in FHEM, über das du dir die benötigten Daten abholst und als json bereitstellen lässt. Das kann FHEM-seitig alles schon mal vorfiltern. Ebenso könnte hier die user-Config (ein anderes Problem wäre damit auch gelöst ;) ) in den Attributen abgelegt werden. Und fhemApp könnte von dem Device entsprechend benachrichtigt werden, wenn eine (relevante) Änderung stattgefunden hat und eine komplette Geräteliste abgerufen werden muss. Man könnte auch beim define des Gerätes gleich das globale appOptions-Attribut anlegen lassen (und beim delete auch wieder löschen).

gb#

Wzut

Zitat von: Benni am 10 April 2021, 20:53:12
Und der Debug-Modus ist jetzt schon Gold wert!
ähh ich blind ... wo finde ich etwas zum Thema Debugging ?

@jemu75 , auf deiner git Seite :
ZitatZudem können eigene Templates in der Datei config.json definiert werden.
Wie schaut denn da die Syntax dazu aus ? Habe ich bisher auch kein Beipiel dazu gefunden.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher