Hauptmenü

FHEM App - Manage your Home

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

Vorheriges Thema - Nächstes Thema

Benni

So,

nachdem es aktuell für PanelItems keine templates gibt, habe ich mir mal was gebastelt.
Das habe ich im Moment nur für at und notify gemacht, da ich diese in fhemapp ausschließlich als PanelItems darstellen werde.
Evtl. kommen noch ein paar andere dazu (Watchdog, ...).

Ich habe mir in meiner 99_myUtils.pm für jeden Device-Type eine sub angelegt, der ich den Namen des Device übergeben kann und die dann dem appOptions-Attribut die PanelItem-Definition zuweist:

Einmal für Notify:


sub newNotify_appOptions {
my $deviceName=shift;

Log3 'global',3,"newNotify_appOptions: $deviceName";

my $attrCmd="attr $deviceName appOptions ". << 'END_VAL';
{
  "panel": {
    "status": [
      "state:inactive:deaktiviert:0:success",
      "state::aktiv:100:success"
    ],
    "btn": [
      "state:inactive:mdi-toggle-switch-off",
      "state::mdi-toggle-switch"
    ],
    "click": [
      "state:inactive:active",
      "state::inactive"
    ]
  }
}
END_VAL

fhem $attrCmd;

}


und einmal für At:


sub newAt_appOptions {
my $deviceName=shift;

Log3 'global',3,"newAt_appOptions: $deviceName";

my $attrCmd="attr $deviceName appOptions ". << 'END_VAL';
{
  "panel": {
    "status": [
      "state:inactive:deaktiviert:0:success",
      "state::%s:100:success"
    ],
    "btn": [
      "state:inactive:mdi-toggle-switch-off",
      "state::mdi-toggle-switch"
    ],
    "click": [
      "state:inactive:active",
      "state::inactive"
    ]
  }
}
END_VAL

fhem $attrCmd;

}


Damit habe ich jetzt erst mal eine einfache Möglichkeit mir bspw. einem Notify eine PanelItem-Definition zuzuweisen.

Beispielaufruf in der FHEMWEB-Kommandozeile für ein Notify Namens 'nyBeispiel':


{newNotiy_appOptions('nyBeispiel')}


Der Einfachheit halber weise ich nun jedem neu angelegten at und jedem neu angelegten notify nun direkt beim Anlegen das zu.

Dazu gibt es ein notify, das auf global.DEFINED reagiert.

Hier die Raw-Definion:


defmod fhemapp_global.defined notify global.DEFINED.* {\
my $newType=$defs{$EVTPART1}->{TYPE};;\
Log3 'global',3,"global.DEFINED new $newType: $EVTPART1";;\
\
if ($newType =~/\b(notify)\b/) {\
newNotify_appOptions($EVTPART1);;\
}\
if ($newType =~/\b(at)\b/) {\
newAt_appOptions($EVTPART1);;\
}\
}


Das war's dann auch schon!

Damit kann ich nun bedenkenlos jederzeit jedes (zumindest jedes neue) at oder notify ganz einfach an ein panel konnektieren.
Aussehen tut es dann so, wie im Screenshot.

Vielleicht kann's ja jemand gebrauchen!

gb#

jemu75

Zitat von: hydrotec am 07 April 2021, 06:07:48
Guten Morgen Jens,
funktioniert jetzt wie gewünscht.
Dankeschön  :)

Gruß, Karsten

v3.6.0

Bzgl. deiner Anfrage auf Github hätte ich folgende Lösung zur Anzeige des Datums in der Menüleiste. (siehe Bild anbei)

jemu75

Zitat von: Benni am 08 April 2021, 22:04:05
So,

nachdem es aktuell für PanelItems keine templates gibt, habe ich mir mal was gebastelt.
Das habe ich im Moment nur für at und notify gemacht, da ich diese in fhemapp ausschließlich als PanelItems darstellen werde.
Evtl. kommen noch ein paar andere dazu (Watchdog, ...).

Ich habe mir in meiner 99_myUtils.pm für jeden Device-Type eine sub angelegt, der ich den Namen des Device übergeben kann und die dann dem appOptions-Attribut die PanelItem-Definition zuweist:

Einmal für Notify:


sub newNotify_appOptions {
my $deviceName=shift;

Log3 'global',3,"newNotify_appOptions: $deviceName";

my $attrCmd="attr $deviceName appOptions ". << 'END_VAL';
{
  "panel": {
    "status": [
      "state:inactive:deaktiviert:0:success",
      "state::aktiv:100:success"
    ],
    "btn": [
      "state:inactive:mdi-toggle-switch-off",
      "state::mdi-toggle-switch"
    ],
    "click": [
      "state:inactive:active",
      "state::inactive"
    ]
  }
}
END_VAL

fhem $attrCmd;

}


und einmal für At:


sub newAt_appOptions {
my $deviceName=shift;

Log3 'global',3,"newAt_appOptions: $deviceName";

my $attrCmd="attr $deviceName appOptions ". << 'END_VAL';
{
  "panel": {
    "status": [
      "state:inactive:deaktiviert:0:success",
      "state::%s:100:success"
    ],
    "btn": [
      "state:inactive:mdi-toggle-switch-off",
      "state::mdi-toggle-switch"
    ],
    "click": [
      "state:inactive:active",
      "state::inactive"
    ]
  }
}
END_VAL

fhem $attrCmd;

}


Damit habe ich jetzt erst mal eine einfache Möglichkeit mir bspw. einem Notify eine PanelItem-Definition zuzuweisen.

Beispielaufruf in der FHEMWEB-Kommandozeile für ein Notify Namens 'nyBeispiel':


{newNotiy_appOptions('nyBeispiel')}


Der Einfachheit halber weise ich nun jedem neu angelegten at und jedem neu angelegten notify nun direkt beim Anlegen das zu.

Dazu gibt es ein notify, das auf global.DEFINED reagiert.

Hier die Raw-Definion:


defmod fhemapp_global.defined notify global.DEFINED.* {\
my $newType=$defs{$EVTPART1}->{TYPE};;\
Log3 'global',3,"global.DEFINED new $newType: $EVTPART1";;\
\
if ($newType =~/\b(notify)\b/) {\
newNotify_appOptions($EVTPART1);;\
}\
if ($newType =~/\b(at)\b/) {\
newAt_appOptions($EVTPART1);;\
}\
}


Das war's dann auch schon!

Damit kann ich nun bedenkenlos jederzeit jedes (zumindest jedes neue) at oder notify ganz einfach an ein panel konnektieren.
Aussehen tut es dann so, wie im Screenshot.

Vielleicht kann's ja jemand gebrauchen!

gb#

Echt coole Idee, um beide "Systeme" zu verbinden.  :) Muss zu meiner Schande gestehen, dass ich bisher garnicht mit at und kaum mit notify gearbeitet habe. Ich habe Paneltems genutzt, um DOIF's zu aktivieren bzw. deaktivieren. Das Sieht bei mir im Moment wie folgt aus. Optimal ist das bzgl. der Definition aber auch noch nicht...  ;)

doif_light_gar           { "panel": { "status": ["mode:enabled:Schaltet das Licht in der Garage bei Dunkelheit.:100:success","mode::Schaltet das Licht in der Garage bei Dunkelheit.:0:success"], "btn": ["mode:enabled:mdi-power-off","mode::mdi-power-on"], "click": ["mode:disabled:enable","mode:enabled:disable"] } }
doif_light_gw            { "panel": { "status": ["mode:enabled:Schaltet das Licht am Gehweg bei Dunkelheit.:100:success","mode::Schaltet das Licht am Gehweg bei Dunkelheit.:0:success"], "btn": ["mode:enabled:mdi-power-off","mode::mdi-power-on"], "click": ["mode:disabled:enable","mode:enabled:disable"] } }
doif_light_windows       { "panel": { "status": ["mode:enabled:Schaltet das Licht in der Galerie bei Dunkelheit.:100:success","mode::Schaltet das Licht in der Galerie bei Dunkelheit.:0:success"], "btn": ["mode:enabled:mdi-power-off","mode::mdi-power-on"], "click": ["mode:disabled:enable","mode:enabled:disable"] } }
doif_motion_ef           { "panel": { "status": ["mode:enabled:Schaltet das Licht in der Einfahrt bei Bewegung.:100:success","mode::Schaltet das Licht in der Einfahrt bei Bewegung.:0:success"], "btn": ["mode:enabled:mdi-power-off","mode::mdi-power-on"], "click": ["mode:disabled:enable","mode:enabled:disable"] } }
doif_motion_ter          { "panel": { "status": ["mode:enabled:Schaltet das Licht auf der Terrasse bei Bewegung.:100:success","mode::Schaltet das Licht auf der Terrasse bei Bewegung.:0:success"], "btn": ["mode:enabled:mdi-power-off","mode::mdi-power-on"], "click": ["mode:disabled:enable","mode:enabled:disable"] } }
doif_waterfall           { "panel": { "status": ["mode:enabled:Schaltet den Wasserfall auf der Terrasse bei Bewegung.:100:success","mode::Schaltet den Wasserfall auf der Terrasse bei Bewegung.:0:success"], "btn": ["mode:enabled:mdi-power-off","mode::mdi-power-on"], "click": ["mode:disabled:enable","mode:enabled:disable"] } }


Mal für mich zum Verständnis - Was kannst du mit at oder notify schalten?

Jamo

#618
ZitatBzgl. deiner Anfrage auf Github hätte ich folgende Lösung zur Anzeige des Datums in der Menüleiste. (siehe Bild anbei)
Finde ich super, für den Desktop view, wo links das Hauptmenü sichtbar ist.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Benni

Zitat von: jemu75 am 08 April 2021, 22:46:53
Mal für mich zum Verständnis - Was kannst du mit at oder notify schalten?

Mit notify kannst du per regex auf Ereignisse in FHEM reagieren, also solche, die bspw. von Readings erzeugt werden.
Mit at kannst du Zeitgesteuert Dinge ausführen.

DOIF kann, wenn ich es richtig weiß auch beides, allerdings habe ich zu einer Zeit mit FHEM angefangen, als es noch kein DOIF gab und habe v.a. deshalb die beiden erstgenannten im Einsatz und (bisher) keine DOIFs. Ich bin grundsätzlich ein Freund von der ein Ding macht eine Sache -Philosophie und weniger von der, der Eier legenden Woll-Milch-Sau. ;)
(... und dann aber in FHEM alles mögliche integrieren, .... genau! :) )

gb#

hydrotec

Zitat von: jemu75 am 08 April 2021, 22:36:54
Hallo Jens,

Bzgl. deiner Anfrage auf Github hätte ich folgende Lösung zur Anzeige des Datums in der Menüleiste. (siehe Bild anbei)
Genau so hatte ich mir das vorgestellt. Dankeschön  :)

PS: Generell mal eine Frage.
Ist es dir lieber im Forum, oder auf GitHub, die Fragen/Anregungen/Wünsche/usw. zu stellen?
Ich persönlich finde GitHub etwas übersichtlicher.
Vielleicht gibt es ja auch noch andere Varianten.

Gruß, Karsten

marboj

Zitat von: jemu75 am 08 April 2021, 17:54:37
Habe eben das Release 3.7.2 freigegeben. Bitte prüfe mal, ob die "langen Tastendrücke" jetzt überall funktionieren.

@tomspatz: Ich musste noch mal an das Thema ran. Bitte gib mir mal eine Rückinfo, wenn mit Version 3.7.2 das "prellen" der Tasten (doppelte Events) wieder da sein sollte.  8)

Klappt jetzt auch im Browser des Handys / Tablets - Danke
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

jemu75

neues Release v3.8.0

- Datum wird bei Desktop Anzeige in Menüzeile angezeigt
- Menübutton wird bei mobiler Anzeige immer angezeigt, "Back-Button" wurde ausgebaut

ACHTUNG: sichert bitte euren Ordner ../fhemapp/cfg/ bevor ihr das neue Release auf euren Web-Server kopiert und fügt das danach dort wieder ein. Ansonsten geht eure Grundkonfiguration und eigene Templates verloren.

Github der Link: https://github.com/jemu75/fhemApp

jemu75

Zitat von: hydrotec am 09 April 2021, 07:53:37
Genau so hatte ich mir das vorgestellt. Dankeschön  :)

PS: Generell mal eine Frage.
Ist es dir lieber im Forum, oder auf GitHub, die Fragen/Anregungen/Wünsche/usw. zu stellen?
Ich persönlich finde GitHub etwas übersichtlicher.
Vielleicht gibt es ja auch noch andere Varianten.

Gruß, Karsten

Hallo Karsten,

für die Zukunft sehe ich Featurewünsche und Bugs auch in GitHub. Insbesondere wenn sich weitere Entwickler für die App finden würden. Aber in der Praxis ist das Forum für viele Nutzer der "erste Anlaufpunkt"
Insofern übertrage ich die Themen aus dem Forum in Github - und hoffe nix zu vergessen.  ;)

jemu75

Zitat von: Benni am 08 April 2021, 21:50:53
Hallo Jens,

ich hätte hier noch was, für die ständig länger werdende Feature-Wunsch-Liste, also was für später ;)

Ich möchte über fhemapp keine Updates und keinen Neustart durchführen. Gleichwohl möchte ich aber schon das sysmon-template nutzen. Von daher wäre es schön, wenn man den restart und den update button des templates optional deaktivieren/ausblenden könnte!

gb#

Ich werde das sysmon-Template mal etwas flexibler bauen und deinen Vorschlag mit berücksichtigen.  :)

marboj

Frage zum Status im Panel:

im Panel soll der Status als Ring für Fensterkontakte angezeigt werden. Leider habe ich unterschiedliche Fensterkontakte, die bei geschlossenem Zustand sowohl den state close als auch den state unknown haben. Habe das wie folgt definiert:

{ "panel": { "status": ["state:unknown:geschlossen:0:success", "state:close:geschlossen:0:success", "state:open:geöffnet:100:success", "state::teilweise geschlossen:50:success"], "btn": "mdi-chevron-right", "link": "/devices/...

Kann man im Status nicht mehrere states für einen Zustand definieren?

Gruß
Marco
meine FHEM-Konfiguration: Raspberry Pi4, BT-Dongle, CUL868, CeeBee II

jemu75

#626
Zitat von: marboj am 09 April 2021, 11:17:00
Frage zum Status im Panel:

im Panel soll der Status als Ring für Fensterkontakte angezeigt werden. Leider habe ich unterschiedliche Fensterkontakte, die bei geschlossenem Zustand sowohl den state close als auch den state unknown haben. Habe das wie folgt definiert:

{ "panel": { "status": ["state:unknown:geschlossen:0:success", "state:close:geschlossen:0:success", "state:open:geöffnet:100:success", "state::teilweise geschlossen:50:success"], "btn": "mdi-chevron-right", "link": "/devices/...

Kann man im Status nicht mehrere states für einen Zustand definieren?

Gruß
Marco

Ja, es gibt aus meiner Sicht mehrere Ansätze
1) du kannst alle Stati deiner Kontakte in die Definition packen. Hierbei beachten, dass die Definitionen von links nach rechts durchgeprüft werden und die Prüfung abgeschlossen wird, sobald eine Bedingung zutrifft
2) du kannst schauen, ob alle Kontakte bei einem bestimmten Zustand den gleichen Wert haben. z.B. "open" und dann für alle anderen Fälle einfach "geschlossen" ausgeben. Das würde z. B. wie folgt aussehen ["state:open:offen", "state::geschlossen"]

Ach und Variante 3 wäre die Verwendung von regex. Hier kannst du tatsächlich mehrere Zustände mit der pipe | prüfen. Hierzu bitte mal regex ansehen. :)

Ergänzung: ich habe mal mit Regexp probiert. Du könntest die Definition wie folgt schreiben:

["state:unknown|close:geschlossen:0:success", "state:open:geöffnet:100:success", "state::teilweise geschlossen:50:success"]

Wobei ich hier noch die Frage hätte, welche Zustände es noch gibt, bei denen "teilweise geschlossen" ausgegeben wird?

Jamo

#627
Hallo Jens,
ich benutze FHEM mit csrf token.
Des öfteren bekomme ich bei Benutzung von fhemapp auf dem iPad/iPhone folgende Fehlermeldung, und dann funktioniert der Befehl (hier Beispiel unmute) mit fhemapp auf dem iPhone/iPad natürlich auch nicht.
2021.04.09 18:16:52 3: FHEMWEB WEB CSRF error:  ne abcdefghijklmnopqrs for client WEB_MEI.NE.IP.AD_49392 / command set Musik Mute 0. For details see the csrfToken FHEMWEB attribute.

Das lesen/senden vom csrf Token scheint irgendwie nicht robust zu sein. Hast Du eine Idee?

Beste Grüsse und danke für alles (auch für die neue Version 3.8.0, habe ich gerade gesehen, Bild im Anhang :-)  ) !
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

tomspatz

Zitat von: jemu75 am 08 April 2021, 17:54:37
Habe eben das Release 3.7.2 freigegeben. Bitte prüfe mal, ob die "langen Tastendrücke" jetzt überall funktionieren.

@tomspatz: Ich musste noch mal an das Thema ran. Bitte gib mir mal eine Rückinfo, wenn mit Version 3.7.2 das "prellen" der Tasten (doppelte Events) wieder da sein sollte.  8)
Moin auch bei 3.8.0  (iOS Version12.5.2 altes iPad und 14.4.2 iPhone X) funktioniert es TOP

tomspatz

dafür habe ich in der 3.8.0 unter iOS im sysmon unten "invalid date