98_MSwitch - Support

Begonnen von Byte09, 25 März 2018, 12:19:58

Vorheriges Thema - Nächstes Thema

Maui

Ich bin zwar kaumNutzer von MSwitch, habe genau ein Device und das hast du geschrieben.
Ich bin von notify zu DOIF. Komme da zwar auch ständig ins straucheln aber min Prinzip kann man mit DOIF wohl quasi (fast) alles bauen. Was ich so gesehen habe, sieht das in MSwitch eher komplexer aus.
So wie ich dich im Wiki versteh, ist dein Ansatz eine steilere Lernkurve als DOIF zu haben und das kommt mir zumindest nicht so vor.
Aber ich versuche es mal konkret.
Meine Temp Sensoren haben einen avg Wert am Tag.
Der vom Vortag wäre eigentlich weg am Folgetag.

Mit DOIF und Aggregation klappt das ganz gut. Ein DOIF für alle Sensoren.
Kriegt man das mit MSwitch ohne "Code" schreiben zu müssen nur durch zurechtklicken hin?


defmod di_bme_day_avg DOIF ([23:59]) ( {foreach (AggrDoIf('@','^ts','BME280_Temperature_avg_day')) {fhem("setreading $_ AvgLastDay ".(ReadingsVal($_,"BME280_Temperature_avg_day",0)))  } })
attr di_bme_day_avg do always

Maui

Hmm ich scheitere sogar schon an der Portierung eines trivialen Beispiels.

defmod di_Klingel DOIF ([Klingel] eq "on") (set telebot message Ding Dong)
attr di_Klingel do always


Was MSwitch in meinen Augen definitiv komplizierter macht, ist das Teilen oder Kopieren von devices.
Im DOIF steht quasi alles im define. Beim MSwitch nur der Name

Gruß
Maui

Byte09

Zitat von: Maui am 22 Juni 2019, 22:19:23
Hmm ich scheitere sogar schon an der Portierung eines trivialen Beispiels.

defmod di_Klingel DOIF ([Klingel] eq "on") (set telebot message Ding Dong)
attr di_Klingel do always


Was MSwitch in meinen Augen definitiv komplizierter macht, ist das Teilen oder Kopieren von devices.
Im DOIF steht quasi alles im define. Beim MSwitch nur der Name

Gruß
Maui
Dank dir für das Feedback. Ich schreibe dir morgen etwas dazu....  sitze gerade schön in der cocktailbar und genieße einen Daiquiri [emoji4]

gruss Byte09

Gesendet von meinem ELE-L29 mit Tapatalk

Maista

Proost Thomas ;)

Ich hab mich zwar kurzzeitig mit MSwitch auseinander gesetzt, aber nach dem ich alles erst mal am laufen hatte war es das wieder.
Es ist wie mit allem, die Zeit um sich damit auseinander zu setzen ist nicht immer da und schnell vorbei.

Schön finde ich das man viel Infos bekommt wenn man diese will. Auch das Sichern der Config ist Klasse.

Ich bin eher ein Grafischer Mensch, deswegen hatte ich auch neulich in dem einen Threat das ganze in der UML-Grafik dargestellt.
Vielleicht würde es für einige einfacher sein die Abhängigkeiten zu verstehen wenn man das mit Graphviz wie bei MQTT2 visualisieren kann?!

Als Schöpfer des Moduls ist vieles für dich klar, wie sollte es auch anders sein  ;D

Die frage ist, kann das Wunsch-Modul genau das Problem lösen was man hat?

DOIF kann auch alles, vieles sieht gegenüber dem Define von MSwitch etwas "kürzer" aus.

Die Vielfalt machts  :)

Gruss Gerd



Byte09

#724
Zitat von: Maui am 22 Juni 2019, 21:05:45

...
Kriegt man das mit MSwitch ohne "Code" schreiben zu müssen nur durch zurechtklicken hin?


defmod di_bme_day_avg DOIF ([23:59]) ( {foreach (AggrDoIf('@','^ts','BME280_Temperature_avg_day')) {fhem("setreading $_ AvgLastDay ".(ReadingsVal($_,"BME280_Temperature_avg_day",0)))  } })
attr di_bme_day_avg do always


Nein, ohne code geht es nicht , so wie bei doif oder notify oder sonstwas nicht . dafür ist die Funktion einfach schon zu komplex.
Der unterschied wird sein , das bei Doif ein perl/doif syntaxmix eingesetzt wird ( in meinen augen letztendlich nur verwirrend ... ist aber wohl geschmackssache ) . die AggrDoIf  Funktion ist eine Funktion die vermutlich auf bestehende fhemfunktion 'devspec2array' aufsetzt , zumindest das selbe bezweckt. dahe besteht mA keine notwendigkeit , hier einen Syntaxmix zu nutzen , wenn ich mit gleichem aufwand direkt im perl bleiben kann.

das ganze sähe dann wie im anhang aus.

daraus folgt natürlich , und damit bin ich ganz bei dir , dass es nicht so einfach möglich ist , eine MSwitch definition in eine Zeile zu packen , die dann einen cryptischen Syntaxmix enthält, um es eben in eine Zeile packen zu können .  Als option bietet MSwitch hierfür aber eine eigene Funktion 'get_config' mit dieser sich Definitionen 'kopieren' lassen.

gruss thomas



Support-InfodateiModulversion: 2.50 Test
Datenstruktur: V2.10

----- Devicename -----
devspec

----- Attribute -----
Attribut MSwitch_Mode: Notify
Attribut MSwitch_Include_MSwitchcmds: 0
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Help: 0
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Expert: 0
Attribut MSwitch_Inforoom: MSwitch
Attribut MSwitch_Include_Devicecmds: 1
Attribut MSwitch_Debug: 0

----- Trigger -----
Trigger device:  no_trigger
Trigger time: on off ononly[20:59] offonly onoffonly
Trigger condition:
Trigger Device Global Whitelist: undef

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: no_trigger
Trigger cmd4: no_trigger

----- Device Actions -----

Device: FreeCmd-AbsCmd1
cmd1: cmd {
foreach ( (devspec2array('NAME=(^ts.*):FILTER=BME280_Temperature_avg_day=(.+)')) )
  {
   fhem("setreading $_ AvgLastDay ".(ReadingsVal($_,"BME280_Temperature_avg_day",0)));
  }
}
cmd2: cmd
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:00
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0


Maui

Moin Thomas,

Ich hoffe der Cocktail hat geschmeckt.
Viele hier werden allerdings kein perl können und daher einen mix im Hintergrund bevorzugen, wenn dafür auf dem Frontend eine einfache Definition herauskommt.
Bei reinem perl könnte man sich ja im Prinzip auch die myUtils vollschreiben...?!

Gruß
Maui

Byte09

Ich gebe dir im Grunde recht.... nur werde ich wohl niemals verstehen, warum man bereit ist die doifsyntax zu lernen,  perl aber nicht. Zumal ich bei nahezu gleichem Aufwand mit perl... me sogar einfacher... alle Möglichkeiten offen habe. Aber ich muss ja nicht alles verstehen [emoji6]

gruss thomas

ps: er hat geschmeckt [emoji12]

Gesendet von meinem ELE-L29 mit Tapatalk

Byte09

Zitat von: Maui am 22 Juni 2019, 22:19:23
Hmm ich scheitere sogar schon an der Portierung eines trivialen Beispiels.

defmod di_Klingel DOIF ([Klingel] eq "on") (set telebot message Ding Dong)
attr di_Klingel do always


Was MSwitch in meinen Augen definitiv komplizierter macht, ist das Teilen oder Kopieren von devices.
Im DOIF steht quasi alles im define. Beim MSwitch nur der Name

Gruß
Maui

Ich arbeite nun daran , das eine Konfiguration , wie in deinem Beispiel demnächst möglich ist . Dieses wird aber sicherlich einige Zeit in anspruch nehmen . Gegenwärtiger stand ist der, das obiges z.B bereits geht.

Das Modul wird dann automatisch erkennen , ob eine definition bei fhemstart oder neuanlage eines devices bereits über die definition erfolgt und wird sich aut. anpassen , es werden aber sicher nicht alle funktionen so umsetzbar sein , sondern eher nur 'grundfunktionen' ( wie diese definiert sind weiss ich selber noch nicht wirklich genau  ???  )

gruss Byte09

edit: die GIT-Version werde ich dem aktuellen Stand jeweils anpassen.


Byte09

#728
Info: kommendes Update auf V 2.4

in den Tgaen werde ich ein Update auf die Version 2.4 einspielen. Diese Version wird folgende Funktionserweiterungen bereitstellen.

In den Conditions ist es nun möglich , Funktionsaufrufe zu nutzen ( ähnlich DOIF ).
Hierzu werden bei Bedarf ankommendeEvents gespeichert und sind auswertbar.
Gespeichert werden die Daten in einem Array "einghender wert  , vorheriger wert vorletzter wert ... )  .

Verfügbare Funktionen :

Differenz
Syntax:
[DIFF<wert>:<reading>] > <differenz>
Beispiel:
[DIFF2:countdown] > 0

wert:
gespeicherter wert (in diesem fall der vorletzte)

differenz:
geforderter differenz zwische aktuellem und vorletztem wert

Schaltung erfolg wenn diese Bedingung 'wahr' ist.

Tendenz
Syntax:
[TEND<wert>:<reading>] > <Mindestwert>
Beispiel:
[TEND2:countdown] > 2

wert:
Es wird jeweils der Durchschnitt von 2 Wertepaaren gebildet. In diesem Fall werden die letzten 4 Werte herangezogen. Paar 1 = aktueller und letzter Wert , Paar 2 = die 2 vorherigen Werte. Bei TEND3 würden diel letzten 6 Wertezur Paarbildung genutzt werden.

Mindestwert:
Der Werteunterschied zwischen den Wertepaaren , der minimal erreicht sein muss, um eine Tendenz zu erkennen.

Rechenzeichen (><):
Dieses ist hier nicht als Rechenzeichen zu werten , sonder als Tendenzanzeige . ( < es wird nach fallender Tendenz gesucht / > sucht nach steigender Tendenz)

Achaltung erfolgt einmalig bei Erkennung der gesuchten Tendenz.
Danach erfolgt keine Schaltung mehr, solange bis eine Tendenzumkehr erfolgt ist.
Erst dann erfolgt wieder eine Schaltung bei erneuter Tendenzumkehr in gesuchte Richtung

AVG
analog DOIF
erklärung folgt im Wiki

INC
analog DOIF
erklärung folgt im Wiki


Weiterhin ist der Code weitestgehend soweit ergänzt, dass Definitionen dieser Art : defmod di_Klingel MSwitch ([Klingel] eq "on") (set telebot message Ding Dong) möglich sind .
Ein Patch der 'console.js' macht es damit auch möglich , MSwitch-Devices direkt über den Eventmonitor anzulegen. Hier hoffe ich , das dieser Patch den Weg in die offizielle Version findet.
Bis klar ist , ob dieser Patch es in die offizielle Version schafft oder nicht , werde ich diese Funktion noch deaktiviert lassen, falls hier noch Änderungen / Anpassungen erforderlich wären und bereits angelegte Definitionen daher nicht mehr funktionieren würden.

Gruss Thomas





MarkusHiba

Hallo,

ich wollte mal MSwitch probieren.

ich habe mal eine doofe Frage:

Ich möchte einen 1 Wire Bewegungsmelder Licht einschalten (das habe ich mit den Modul hinbekommen).
Nun möchte ich das Licht zeitverzögert ausschalten (das bekomme ich nicht hin).
sitze schon die ganze Nacht dran und lese und probiere.

bzw. eine andere Idee.

Wie bekommt man es hin das dass Licht langsam hochdimmt und beim zeitverzögerten Auschalten langsam abdimmt. Geht das mit dem Modul auch.

Grüße

MarkusHiba
Mit freundlichen Grüßen

MarkusHiba

Byte09

guten morgen ,

grundsätzlich giebst du eine zeitverzögerung in dem feld 'cmd delay ...' ein ( siehe bild ) .

ein langsames ein oder ausdimmen sollte - wenn möglich - immer über die hardware erfolgen. es ist auch über das modul machbar, falls die hardware es nicht unterstützt , dieses ist aber sehr systembelastend ( egal mit welchem hilfsmodul ) .

sollte wirklich ein modulseitiges dimmen benötigt werden , melde dich einfach nochmal, dann schauen wir.
für diesen fall gib mir doch bitte einfach schon einmal was du bereits hast ( get DEVICE get-config )

gruss Byte09



MarkusHiba

#731
Danke,

so hatte ich es auch eingestellt, ging nicht, habe es dann nochmal probiert und siehe da es ging.
Danke sehr.

Nun folgendes MSwitch ist her sehr vielseitig.
Ich habe 2x MSwicht angelegt aber man könnte diese auch in einen fassen. Oder?

zum 1:
Dieser soll auslösen wenn der Melder einen richtigen Alarm gibt, wenn ich den Melder als Test auslöse erfüllt er die selbe Bedingung deswegen ist die Verzögerung drin.

Modulversion: 2.30
Datenstruktur: V2.00

----- Devicename -----
Brandmelder_MSwitch

----- Attribute -----
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Expert: 0
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Include_Devicecmds: 1
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Help: 0
Attribut MSwitch_Mode: Notify
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Debug: 0
Attribut room: Test
Attribut MSwitch_Include_MSwitchcmds: 0

----- Trigger -----
Trigger device:  Brandmelder
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: undef

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: reading:on
Trigger cmd4: reading:off

----- Device Actions -----

Device: Brandmelder-AbsCmd1
cmd1: alarm on
cmd2: no_action
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:03
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0


zum 2:
Dort habe ich einen Taster wenn ich diesen 10 s drücke soll der Alarm auf off geschalten werden, natürlich wenn ich nach den Melder geschaut habe.

Modulversion: 2.30
Datenstruktur: V2.00

----- Devicename -----
Brandmeldeanlage_zurueck_stellen_MSwitch

----- Attribute -----
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Help: 1
Attribut MSwitch_Mode: Notify
Attribut MSwitch_Include_MSwitchcmds: 0
Attribut MSwitch_Debug: 0
Attribut room: Test
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Expert: 0
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Include_Devicecmds: 1

----- Trigger -----
Trigger device:  Brandmeldeanlage_zurueck_stellen
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: undef

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: reading:on
Trigger cmd4: reading:off

----- Device Actions -----

Device: Brandmeldeanlage_zurueck_stellen-AbsCmd1
cmd1: alarm off
cmd2: no_action
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:10
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: Brandmelder-AbsCmd1
cmd1: alarm off
cmd2: no_action
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:10
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0


Könnte mir jemand helfen komme da nicht weiter.

Grüße

Markus Hiba
Mit freundlichen Grüßen

MarkusHiba

Byte09

#732
Zitat von: MarkusHiba am 21 Juli 2019, 21:49:15
Danke,

so hatte ich es auch eingestellt, ging nicht, habe es dann nochmal probiert und siehe da es ging.
Danke sehr.

Nun folgendes MSwitch ist her sehr vielseitig.
Ich habe 2x MSwicht angelegt aber man könnte diese auch in einen fassen. Oder?

zum 1:
Dieser soll auslösen wenn der Melder einen richtigen Alarm gibt, wenn ich den Melder als Test auslöse erfüllt er die selbe Bedingung deswegen ist die Verzögerung drin.

Modulversion: 2.30
Datenstruktur: V2.00

----- Devicename -----
Brandmelder_MSwitch

----- Attribute -----
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Expert: 0
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Include_Devicecmds: 1
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Help: 0
Attribut MSwitch_Mode: Notify
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Debug: 0
Attribut room: Test
Attribut MSwitch_Include_MSwitchcmds: 0

----- Trigger -----
Trigger device:  Brandmelder
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: undef

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: reading:on
Trigger cmd4: reading:off

----- Device Actions -----

Device: Brandmelder-AbsCmd1
cmd1: alarm on
cmd2: no_action
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:03
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0


zum 2:
Dort habe ich einen Taster wenn ich diesen 10 s drücke soll der Alarm auf off geschalten werden, natürlich wenn ich nach den Melder geschaut habe.

Modulversion: 2.30
Datenstruktur: V2.00

----- Devicename -----
Brandmeldeanlage_zurueck_stellen_MSwitch

----- Attribute -----
Attribut MSwitch_Extensions: 0
Attribut MSwitch_Help: 1
Attribut MSwitch_Mode: Notify
Attribut MSwitch_Include_MSwitchcmds: 0
Attribut MSwitch_Debug: 0
Attribut room: Test
Attribut MSwitch_Include_Webcmds: 0
Attribut MSwitch_Expert: 0
Attribut MSwitch_Delete_Delays: 1
Attribut MSwitch_Lock_Quickedit: 1
Attribut MSwitch_Ignore_Types: notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
Attribut MSwitch_Include_Devicecmds: 1

----- Trigger -----
Trigger device:  Brandmeldeanlage_zurueck_stellen
Trigger time:
Trigger condition:
Trigger Device Global Whitelist: undef

----- Trigger Details -----
Trigger cmd1: no_trigger
Trigger cmd2: no_trigger
Trigger cmd3: reading:on
Trigger cmd4: reading:off

----- Device Actions -----

Device: Brandmeldeanlage_zurueck_stellen-AbsCmd1
cmd1: alarm off
cmd2: no_action
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:10
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0

Device: Brandmelder-AbsCmd1
cmd1: alarm off
cmd2: no_action
cmd1 condition:
cmd2 condition:
cmd1 delay: 00:00:10
cmd2 delay: 00:00:00
repeats: 0
repeats delay: 0
priority: 1
id: 0
comment:
cmd1 exit: 0
cmd2 exit: 0


Könnte mir jemand helfen komme da nicht weiter.

Grüße

Markus Hiba

Hi Markus,

ich komme auf die schnelle nicht ganz klar.

im ersten hast du als triggerndes event folgendes eingetragen:
Trigger cmd3: reading:on
Trigger cmd4: reading:off

ich hab da so meine zweifel. das deas ankommende event wirklich 'reading:xxxx' ist . schau doch bitte mal , was der eventmonitor ausgiebt, wenn der melder auslöst.

den zweiten kann ich auch noch nicht ganz nachvollziehen , der scheint sich ja irgendwie selber zu triggern. von diesem gib mir doch bitte mal die rawdefinition incl. aller beteiligten devices. Ich schaue mir das dann heute abend mal in ruhe an.

gruss Byte09

PS: ich glaube das wird etwas kompliziert über das Forum. Wenn du magst können wir heute abend mal dazu telefonieren, ich schicke dir mal meine nummer per PM , wenn ich zuhause bin.

Panik

Hallo Byte09,

seit längerer Zeit spuckt mein Log immer etliche dieser Zeile(n) aus:

PERL WARNING: Use of uninitialized value $reading[2] in string eq at ./FHEM/98_MSwitch.pm line 8544, <GEN22> line 17.


Wobei die Zeilennummer hochgezählt wird.
Was hat das zu bedeuten?

Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

Byte09

Zitat von: Panik am 18 August 2019, 10:25:31
Hallo Byte09,

seit längerer Zeit spuckt mein Log immer etliche dieser Zeile(n) aus:

PERL WARNING: Use of uninitialized value $reading[2] in string eq at ./FHEM/98_MSwitch.pm line 8544, <GEN22> line 17.


Wobei die Zeilennummer hochgezählt wird.
Was hat das zu bedeuten?
schaue ich mir im laufe des Tages an und fixe es

gruss Byte09

Gesendet von meinem ELE-L29 mit Tapatalk