Dummy Definition zur Automatisierung

Begonnen von dt2510, 07 März 2017, 11:20:23

Vorheriges Thema - Nächstes Thema

dt2510

Ich bräuchte mal etwas Hilfe...

Aktuell verwende ich zum automatischen schalten meiner Lampen mehrere Dummies, die die Default Zustände je nach Homestatus/Tageszeit festlegen und ob überhaupt geschaltet werden soll:

define Lampe01_HomeDay dummy
define Lampe01_HomeNight dummy
define Lampe01_HomeAuto dummy
...


Bei Wechsel Tag/Nacht oder Nacht/Tag wird dann entsprechend geschaltet, falls LampeXX_yyyyAuto "on" ist. Zudem prüfe ich noch ab, ob der aktuelle Schaltzustand dem Defaultwert vor dem Wechsel entspricht. Ansonsten wird auch nicht geschaltet, da der Status bereits manuell geändert wurde (z.B. Licht früher eingeschaltet um zu lesen usw...). Bei Wechsel des Homestatus wird der jeweilige Defaultwert erzwungen.

Mein Problem ist folgendes:

Je Lampe muß ich 12 jetzt Dummies (je 3 pro HomeStatus "home","sleep","away","holiday") definieren. Um die Lampe im Frontend (ich nutze TABLETUI) konfigurieren zu können muss ich zusätzlich 12 Dummies zur Konfiguration bereithalten, in die die Werte von LampeXX übertragen werden (und auch wieder zurück), damit ich nicht für jede Lampe einen separaten Dialog programmieren muß (DER Aufwand wäre immens).

Wie kann ich ein Modul zu definieren, das diese 12 Werte enthält und das ich dann einfach statt der Dummies verwenden kann, also in der Form:

define Lampe01_Automation MeinAutomationsModul

Zudem stellt sich die Frage, ob die 12 Werte dann als Readings oder Attribute gespeichert werden sollten.
Für Denkanstöße oder Hilfe wäre ich sehr dankbar...

Wuppi68

warum überhaupt Dummies?

wenn per Schalter oder GUI geschaltet wird -> oberste Priorität

ansonsten prüfen doch einfach bei Statuswechsel von Home.* ob sich an der Lampe etwas ändern soll...


oder was hast Du genau vor?
FHEM unter Proxmox als VM

DeeSPe

Denn Sinn und Zweck verstehe ich auch noch nicht ganz.
Für das Schalten von mehreren Zuständen bietet sich aber z.B. LightScene an.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

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

rudolfkoenig

Statt Ladung voller dummies kann man auch selbst erstellte Readings oder Attribute verwenden, um Zustaende zu speichern.

dt2510

Zitat von: Wuppi68 am 07 März 2017, 11:27:20
... oder was hast Du genau vor?

Ich erklär' das am Besten an einem Beispiel:

Über das Frontend (hier TABLETUI) kann ich mir in einem Dialog (Dialog1.jpg) Infos zu meinen Sensoren/Aktoren anzeigen und diese auch schalten usw. Neben dem Schalter (Glühbirne) befindet sich ein Button um die Lampe zu konfigurieren (das hab' ich außerdem auch für Dimmer und Rollläden so gelöst). Damit kann man den Konfigurationsdialog (Dialog2.jpg) öffnen und im Frontend das Verhalten der Lampe anpassen.

dt2510

Zitat von: rudolfkoenig am 07 März 2017, 11:41:33
Statt Ladung voller dummies kann man auch selbst erstellte Readings oder Attribute verwenden, um Zustaende zu speichern.

Ein Modul wäre von der Handhabung her einfacher, da ich bei einem neuen Aktor nur noch zusätzlich das Modul definieren und in die Schaltlogik meiner 99_myUtils.pm integrieren müsste...

rabehd

Ich verstehe das Anliegen nicht  :-[.
Mir würde es helfen, wenn Du Deine Absicht erklärst oder mindestens Deinen Dialog2. Am Besten, wenn Du es so erklärst als ob Du Fhem nicht kennst.
Auch funktionierende Lösungen kann man hinterfragen.

dt2510

#7
Mein Dialog 2 legt fest, wann und wie eine Lampe geschaltet wird:

Die Spalten stehen für den Status, ob ich zuhause, im Bett, unterwegs oder in Urlaub bin. Die Zeilen geben den Sollzustand für Tag und Nacht an und ob bei Tag/Nacht Wechsel automatisch geschaltet werden soll.

Ein Beispiel:

Meine Wohnzimmerlampe ist

- tagsüber aus
- abends auf 5% gedimmt, wenn ich unterwegs oder im Bett bin (Licht für den Hund)
- auf 100% , wenn ich abends nach Hause komme bzw. zu Hause bin

Das sieht dann wie im Beispiel unten aus.
Wechselt der Homestatus, wird der jeweilige Sollzustand erzwungen. Im diesem Beispiel also z.B. das Licht auf 5% gedämmt, wenn ich abends noch weggehe.
Bei Tag/Nacht Wechsel wird nur geschaltet, wenn das gewünscht ist und der Zustand des Schalters gegenüber dem Sollzustand nicht verändert wurde (wenn ich z.B. die Lampe bei Dämmerung schon auf 50% gedimmt habe, bleibt diese Einstellung beim Wechsel zum Nachtmodus erhalten und wird nicht auf 100% gesetzt).

Wuppi68

#8
12 mal Ein/Aus in einem Reading ist doch kein Thema - sogar noch 4 Zustände zur freien Benutzung 8-)

als Beispiel soll das Reading mySetup heissen

Home = Bit 0-3
Sleep = Bit 4-7
Car = Bit 8-11
Koffer = Bit 12-15

und dann in den Einzelnen Gruppen

Day = Bit 0
Night = Bit 1
Timer = Bit 2
unused = Bit 4

um dann z.B. Gruppe Car zu erhalten

mySetup logisch mit 0b_0000111100000000 verunden und dann 8 Bit nach Rechts schieben

also ungefähr so

my Lampe01Car = (ReadingsVal('Lampe01', 'mySetup', '0') & 0b_0000111100000000) >> 8;

jetzt kannst Du auch ganz einfach schauen, wie die Einzelnen Unterstatus sind:

Lampe01CarHome   = (Lampe01Car & 1) > 0 ? 1 : 0
Lampe01CarNight    = (Lampe01Car & 2) > 0 ? 1 : 0
Lampe01CarTimer   = (Lampe01Car & 4) > 0 ? 1 : 0
Lampe01CarUnused = (Lampe01Car & 8) > 0 ? 1 : 0


Das Setzen des Status geht dann entsprechend anders herum

um ein Bit zu setzen musst Du es dann logisch verodern

Das ganze fällt unter das Stichwort enum

FHEM unter Proxmox als VM

dt2510

Hmm ... an einen Bitschlüssel hab' ich (als Assemblerprogrammierer !!) noch gar nicht gedacht ...
Ich hab' allerdings bisher mehr Wert auf Lesbarkeit der 99_myUtils.pm gelegt, da ich mit Perl immer noch nicht so ganz klar komme ;)

justme1968

erste frage: wie wichtig ist das interface dazu bzw. wo oft ändert sich die konfiguration? recht es wenn alles automatisiert ist und von hand bzw. per fhemweb konfigurierbar ist?

vorschlag zur implementierung:
- die wunschkonfiguration wird in ein oder zwei readings direkt ins jeweilige device gesteckt. ohne zusätzliche dummys.

- mit cmdalias definierst du dir ein manual-on kommando das du beim manuellen einschalten aus dem ui verwendendest. dieses setzt über ein reading ein flag das manuell geschaltet wurde und schaltet danach normal ein.

- manuelles ausschalten löscht das flag und schaltet aus.

- in deiner automatik kannst du z.b. per FILTER alle devices zusammen suchen die nicht manuell überteuert sind und anhand der readings der wunschkonfiguration steuern.

wenn ein. wies device dazu kommt musst du nur die readings für den wunschtustand setzen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Wuppi68

Zitat von: dt2510 am 07 März 2017, 12:39:52
Hmm ... an einen Bitschlüssel hab' ich (als Assemblerprogrammierer !!) noch gar nicht gedacht ...
Ich hab' allerdings bisher mehr Wert auf Lesbarkeit der 99_myUtils.pm gelegt, da ich mit Perl immer noch nicht so ganz klar komme ;)

#

ist der Freund der Lesbarkeit

und Du brauchst doch nur 2 Funktionen zu implementieren

GetStaus(Device ...)
SetStatus(Device ...)
FHEM unter Proxmox als VM

dt2510

#12
Zitat von: Wuppi68 am 07 März 2017, 12:36:33
12 mal Ein/Aus in einem Reading ist doch kein Thema - sogar noch 4 Zustände zur freien Benutzung 8-)
...
um dann z.B. Gruppe Car zu erhalten

mySetup logisch mit 0b_0000111100000000 verunden und dann 8 Bit nach Rechts schieben

Welchen Inhalt hat dann das Reading mySetup selbst ? Numerisch z.b. 146 oder Bitschlüssel als Text '10010010' oder ganz anders ?

edit:
mir fällt gerade ein, daß ein Bitschlüssel suboptimal ist, da ich ich auch Dimmer (mit pctXXX) und Rollläden (mit dimXXX) entsprechend steuere...

Ich könnte natürlich auch die Automatik fest programmieren, über das Interface ändert sich die Konfiguration natürlich selten bis gar nicht - sieht allerdings nett aus und ist nice to have 8)

dt2510

Zitat von: justme1968 am 07 März 2017, 12:40:22
erste frage: wie wichtig ist das interface dazu bzw. wo oft ändert sich die konfiguration? recht es wenn alles automatisiert ist und von hand bzw. per fhemweb konfigurierbar ist?

vorschlag zur implementierung:
- die wunschkonfiguration wird in ein oder zwei readings direkt ins jeweilige device gesteckt. ohne zusätzliche dummys.

- mit cmdalias definierst du dir ein manual-on kommando das du beim manuellen einschalten aus dem ui verwendendest. dieses setzt über ein reading ein flag das manuell geschaltet wurde und schaltet danach normal ein.

- manuelles ausschalten löscht das flag und schaltet aus.

- in deiner automatik kannst du z.b. per FILTER alle devices zusammen suchen die nicht manuell überteuert sind und anhand der readings der wunschkonfiguration steuern.

wenn ein. wies device dazu kommt musst du nur die readings für den wunschtustand setzen.

Über das Interface ändert sich die Konfiguration natürlich selten bis gar nicht, aber ich könnte, wenn ich wollte :)
Wie müsste ich ein solches Reading beim Device erstellen (hab' ich noch nie gemacht ...).
Die Problematik der manuellen Umschaltung hab' ich programmtechnisch schon anders gelöst.

justme1968

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

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