Gui (pgm2|FHEMWEB) für Wochenprofil

Begonnen von Risiko, 18 Januar 2015, 18:32:45

Vorheriges Thema - Nächstes Thema

harry66

Hallo,

wollte mich an dieser stelle mal bedanken  ;D
super Arbeit genau so was hatte ich noch gesucht!

Gruß Rolf
BananaPI, RPI, nanoCUL433, RCS 1000 N Comfort, Dect200, Powerline546E, MAX!Cube, 7xMAX! HT's,3xMAX!FK HMLAN, HM-LC-Bl1PBU-FM, HM-LC-Sw4-Ba-PCB Relay Karte,  LW12, Sqeezelite, TabletUI=Kindel 8" FireHD+Handy,AmazonEcho

Sargon

Hallo zusammen,

ich habe mir einen Dummy angelegt der das Wochenprofil enthält um an Feiertagen das Tagesprogram auf das vom Samstag oder Sonntag zu ändern (in Arbeit).
Wenn über den "HTML-Editor" das Wochenprogramm geändert wird, kann ich da ein Notify anlegen das mir mein Copy aufruft um meinen Dummy entsprechend neu zu setzen? Im Event Monitor habe ich nur das gesehen:

2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-0-Sat-time: 00:00-09:30 / 09:30-22:00 / 22:00-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-0-Sat-temp: 19.0 °C / 22.0 °C / 19.0 °C / 19.0 °C
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-1-Sun-time: 00:00-09:30 / 09:30-21:30 / 21:30-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-1-Sun-temp: 19.0 °C / 22.0 °C / 19.0 °C / 19.0 °C
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-2-Mon-time: 00:00-11:00 / 11:00-21:30 / 21:30-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-2-Mon-temp: 19.5 °C / 22.0 °C / 19.0 °C / 19.0 °C
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-3-Tue-time: 00:00-11:00 / 11:00-21:30 / 21:30-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-3-Tue-temp: 19.0 °C / 22.0 °C / 19.0 °C / 19.0 °C
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-4-Wed-time: 00:00-11:00 / 11:00-21:30 / 21:30-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-4-Wed-temp: 19.0 °C / 22.0 °C / 19.0 °C / 19.0 °C
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-5-Thu-time: 00:00-11:00 / 11:00-21:30 / 21:30-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-5-Thu-temp: 19.0 °C / 22.0 °C / 19.0 °C / 19.0 °C
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-6-Fri-time: 00:00-11:00 / 11:00-22:00 / 22:00-23:55 / 23:55-00:00
2015-02-01 23:03:51 MAX WZ_Thermostat_Strasse weekprofile-6-Fri-temp: 19.0 °C / 22.0 °C / 19.0 °C / 19.0 °C

Kann ich darauf basierend ein Notify definieren? Kann etwas in dieser Art funktionieren?
define updateWeekprofil notify .:weekprofile. {MAX_Copy_Weekprofile_To_Dummy($Device)}


Ich konnte zumindest nichts sehen, es wurde aber auch kein Fehler ins Log geschrieben.

Gruß
Thomas
Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

Risiko

@Sargon

Das hat nichts mit diesem Modul zu tun.
Denke dafür ist ein separater Thread  besser geeignet bzw. schau dir Regular Expressions und Syntax vom notify an.
Aber vielleicht soviel:

define ntfy_copy notify .*weekprofile.* {Copy($EVENT);;}


Wenn es wirklich alle Readings von allen Geräten (auch vom Dummy) sein sollen.
Dann muss man innerhalb von Copy noch $EVENT zerlegen oder du verwendest $EVTPART0, etc.

Viel Erfolg.

Risiko

Roaster

Hi,

das wäre zwar wahrscheinlich ein Thema für den readingsgroup Thread, paßt aber thematisch besser hierher, wegen dem Aufruf des Wochenprofileditors.

Ich habe eine vorhandene readingsGroup (Heizungswerte) , die ich jetzt um einen Link zum Einstellen des Wochenprofile erweitert habe, zumindest war dies der Plan:
<%sani_heating>,<Ventil>,<Soll-Temp>,<Ist-Temp>,<Modus>,<Batterie> ht_(.*|):valveposition,desiredTemperature,temperature,<{HeizungModeAuto($DEVICE)}@mode>,battery,<{HeizungUpDown($DEVICE,"up")}@desiredTemperature>,<{HeizungUpDown($DEVICE,"down")}@desiredTemperature>,<%weekprofile>
In der letzten Spalte hätte ich nun den Aufruf zum Einstellen der Wochenprofile eingebaut.

Das entsprechende Attribut commands lautet bei mir:
commands { 'Heizungswerte.weekprofile' => '{MAX_EDIT_Week($DEVICE,"Wochenprofil");;}' }

Wenn diese readingsgroup nun im Browser dargestellt wird, dann ergibt sich hier etwas sehr Chaotisches, siehe angefügtes Bild. Erstens wird gleich der Wochenprofil-Editor angezeigt und zweitens ein paar Zeilen Coding anstelle des erwarteten Weblinks.

Was mache ich hier falsch?

Grüße,
Michael

Sargon

Hallo,

ich glaube mit den Readings von allen Geräten soll kein Problem sein, weekprofile sollte es eigentlich nur bei Thermostaten geben und auch bei den Dummys sollte es kein Problem sein da verwende ich setreading um die Daten in den Dummy zu schreiben.
Was wahrscheinlich das Problem sein dürfte ist, dass ich nicht unterscheiden kann ob das weekprofile von deinem Editor "gesendet" wurde (dann soll der Dummy geändert werden) oder ob es von meiner Feiertagsfunktion gesendet wird (dann soll der Dummy nicht geändert werden). Eventuell muss ich bei dir im Code noch das Update meines Dummys mit einbauen.

Du hast recht das hat wahrscheinlich nur wenig mit deinem Modul zu tun.

Gruß
Thomas
Unitymedia IPv6, Synology 212+, Cul, 4 Max Thermostate und 4 Fensterkontakte

Risiko

@Roaster
Diese Funktionalität habe ich selbst so noch nicht getestet. Aber ich denke es könnte so gehen.
Bei den command muss man über trigger und einem notify gehen.
Etwa so:

define NTFY_EDIT_WEEK notify NTFY_EDIT_WEEK  {MAX_EDIT_Week($EVENT);;}
commands {'Heizungswerte.weekprofile' => 'trigger NTFY_EDIT_WEEK $DEVICE'}


Wenn ich es schaffe, probiere ich es morgen selbst mal aus. Unter Umständen muss ich noch was in der Funktion MAX_EDIT_Week anpassen.

@Sargon
Also der Editor sendet auch nur ein set <device> weekprofile ... , so als wenn man es in der Kommandozeile eingeben würde.
Das notify wird dann vom <device> ausgelöst, nicht vom Editor.
Wenn du bei dem dummy mit setreading arbeitest, dann wird dort auch ein notify ausgelöst.
Ich denke man kann wohl in der Notfy-Funktion unterscheiden, ob das notify vom Device A oder B  kommt.

Risiko.

justme1968

MAX_EDIT_Week liefert den html code  inclusive der js routinen zurück. wenn du in der readingsGroup einen link anzeigen willst darfst du natürlich nicht den kompletten html code einbauen sondern musst einen link auf den weblink den du mit MAX_EDIT_Week angelegt hat einbauen.

wenn du tatsächlich den editor in der readingGroup anzeigen möchtest musst du den js teil vom html teil trennen und nur den html teil einbinden. den js teil musst du dann anders auf die seite bringen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Risiko

@andre

Vielen Dank für die Hinweise.
Mir ist klar, dass das Design vom Editor absolut nicht passt. So wie der aktuell Zustand ist, ist er für Readingsgroup, Floorplan, etc nicht geeignet - war auch nicht vorgesehen.

Der richtigere Weg wäre meiner Meinung nach:

  • in jedem Device eine  Aufbereitung der Readings für ein Widget realisieren

    • das Widget wäre dann für alle Thermostate (MAX, Homematic,etc.) nutzbar
    • die Readingsaufbereitung z.B. als JSON könnten auch andere Frontends nutzen
  • Das widget in js realisieren
  • widgetoverride benutzen

Aktuell sehe ich keine Möglichkeit die Informationen von mehreren Readings an ein Widget zu bekommen.
Alle Lösungen (so habe ich es verstanden) basieren auf einer 1:1 Zuordnung.
Mit FW_directNotify komme ich da auch nicht so richtig weiter - kann aber auch ein Verständnisproblem sein.

Zitat von: justme1968 am 03 Februar 2015, 12:47:25
musst einen link auf den weblink ... einbauen.

Das verstehe ich nicht so richtig.
Da Anlegen eines manuellen Links (<a...) scheint nicht zu funktionieren, da dieser immer in das onClick="FW_cmd('/fhem?XHR=1 ... eingebaut wird

Risiko.

Roaster

Hm so richtig scheint es wirklich nicht zu funktionieren.

Weder define not.EditWeekProfile notify Heizungswerte:not.EditWeekProfile  {MAX_EDIT_Week($EVENT);;}
noch define not.EditWeekProfile notify Heizungswerte:not.EditWeekProfile  {MAX_SHOW_WeekProfile($DEVICE);;}
oder durch direkte Angabe des Max Thermostats define not.EditWeekProfile notify not.EditWeekProfile  {MAX_SHOW_WeekProfile('ht_HeizungEltern');;}
löst hier die Anzeige des Wochenprofils aus.

Restliches Coding der RG
define Heizungswerte readingsGroup [..]<%time_timer@orange>
[..]
attr Heizungswerte commands {'Heizungswerte.time_timer@orange' => 'trigger not.EditWeekProfile'}


Auch ein trigger not.EditWeekProfile direkt in der Kommandozeile löste keine Anzeige des Wochenprofils aus.

justme1968

der notify und trigger ansatz ist wirklich nicht der richtige um auf eine andere seite zu wechseln.

nur links die ein save oder set enthalten (also ein set kommando ausführen) werden durch eine XHR version ersetzt.

ein ganz normaler link auf eine web seite z.b. die detail seite des weblinks oder einen raum in dem der weblink sichtbar ist werden nicht ersetzt sondern wechseln beim anklicken da hin.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

fhemtde

Super Arbeite "Risiko"

vielen Dank dafür.

beste Grüsse
Thorsten

Risiko

Hallo @all,

um einen Link zum editieren zu erzeugen, habe ich eine Hilfsfunktion MAX_EDIT_Week_LNK eingebaut.
Damit kann man einen Link zum editieren auf eine neue Seite in einer Readingsgroup integrieren.
Ich gebe zu, schön ist anders.


define Grp readingsGroup MAX_FAKE_WT.*:desiredTemperature,state,mode,<{MAX_EDIT_Week_LNK("$DEVICE")}>
oder
define Grp readingsGroup MAX_FAKE_WT.*:desiredTemperature,state,mode,<{MAX_EDIT_Week_LNK("$DEVICE",undef,"weblnk")}>

Parameter der Funktion:

  • Name des MAX Thermostats
  • Name für den link: Name kann auch ein Icon-Name sein, undef für Default-Icon
  • Name des weblnk, welcher die userattr beinhaltet.

Risiko.

Roaster

Hi,

Ich habs noch nicht getestet, aber trotzdem schon Mal Danke dafür.
D. h. dass der Klick auf eines der Icons egal in welcher Zeile, immer die komplette Übersicht für alle Thermostate anzeigt und nicht für ein individuelles Thermostat - das aus der aktuell angeklickten Zeile?

Michael

Risiko

Hallo Michael,

nein. Jeder einzelne Link führt zur Bearbeitung des kompletten Wochenprofils eines individuellen Thermostats.
Bezogen auf das Bild.
Link (Icon) erste Reihe -> Thermostat A mit dem Name MAX_FAKE_WT
Link (Icon) zweite Reihe -> Thermostat B mit dem Name MAX_FAKE_WT2

Risiko.

WBMK

#44
@Risiko

Thanx for this extention! Really cool

I altered the tag's using the 'userattr', but can i change the title aswell? the title still say's "Wochenprofil" or "Bearbeite Wochenprofil" in German.

Thanx again,

WBMK