Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr

Begonnen von DeeSPe, 07 Januar 2017, 15:59:43

Vorheriges Thema - Nächstes Thema

ComputerZOO

Naja, morgen reicht ja auch noch, kannst ja dafür heute schonmal nen Appetizer raushauen, um die Vorfreude noch zu steigern  :D . Was kommt denn Neues?

DeeSPe

Wirklich viel "Neues" kommt nicht, eher Fehlerbeseitigungen und kleine Neuerungen!
Aber es kommt eine GROSSE Veränderung!
Im Perl Code müssen zukünftig die Semikolon nicht mehr verdoppelt werden.
Das hat allerdings den Nachteil dass sich Perl- und FHEM-Code offensichtlich nicht mehr in einem HomeCMD Attribut mischen lassen.
Zumindest klappt das beim bisherigen Testen nicht so erfolgreich. :o

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

ComputerZOO

Zitat von: DeeSPe am 29 Januar 2017, 21:37:05
Wirklich viel "Neues" kommt nicht, eher Fehlerbeseitigungen und kleine Neuerungen!
Aber es kommt eine GROSSE Veränderung!
Im Perl Code müssen zukünftig die Semikolon nicht mehr verdoppelt werden.
Das hat allerdings den Nachteil dass sich Perl- und FHEM-Code offensichtlich nicht mehr in einem HomeCMD Attribut mischen lassen.
Zumindest klappt das beim bisherigen Testen nicht so erfolgreich. :o

Gruß
Dan

Oh, funktioniert folgender Code dann nicht mehr?
{
Log 3, "HomeCMDmode-awoken: set";;
if (ReadingsVal("da.esp.aussensensor","lux","") <= 400) {
fhem "set sz.lightscene scene 5_Scene";;
fhem "set bz.lightscene scene 2_Scene";;
}
fhem "set sz.squeezebox.boom volume 25";;
Log 3, "HomeCMDmode-awoken: done";;
}

DeeSPe

Zitat von: ComputerZOO am 29 Januar 2017, 21:41:46
Oh, funktioniert folgender Code dann nicht mehr?
{
Log 3, "HomeCMDmode-awoken: set";;
if (ReadingsVal("da.esp.aussensensor","lux","") <= 400) {
fhem "set sz.lightscene scene 5_Scene";;
fhem "set bz.lightscene scene 2_Scene";;
}
fhem "set sz.squeezebox.boom volume 25";;
Log 3, "HomeCMDmode-awoken: done";;
}


Das ist reiner Perl Code!
Einfach doppelte Semikolon mit einfachen ersetzen und gut ist!
Ich glaube es könnte sogar so bleiben und würde funktionieren (ungetestet).

Gruß
Dan

P.S. Sowas geht nicht mehr:
{fhem "delete atTmp_bla" if ($defs{atTmp_bla})}; define atTmp_bla at ............; set L1 rgb ff0000;
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

binford6000

P.S. Sowas geht nicht mehr:
{fhem "delete atTmp_bla" if ($defs{atTmp_bla})}; define atTmp_bla at ............; set L1 rgb ff0000;
[/quote]

Das wäre aus meiner Sicht zu verschmerzen

DeeSPe

Zitat von: binford6000 am 29 Januar 2017, 21:49:30
P.S. Sowas geht nicht mehr:
{fhem "delete atTmp_bla" if ($defs{atTmp_bla})}; define atTmp_bla at ............; set L1 rgb ff0000;


Das wäre aus meiner Sicht zu verschmerzen

Klar, zu verschmerzen ist alles. ;)
Man muss nur wissen was sich verändert hat und den eigenen Code entsprechend anpassen. 8)
Ich hatte auch nur zwei HomeCmd Attribute wo ich den Misch-Masch drin hatte und die ich entsprechend anpassen musste. Man muss ja nur die geschweifte Klammer versetzen und den FHEM-Code mit fhem "" umschliessen.

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

binford6000

Zitat von: DeeSPe am 29 Januar 2017, 21:59:46
Klar, zu verschmerzen ist alles. ;)
Man muss nur wissen was sich verändert hat und den eigenen Code entsprechend anpassen. 8)
Ich hatte auch nur zwei HomeCmd Attribute wo ich den Misch-Masch drin hatte und die ich entsprechend anpassen musste. Man muss ja nur die geschweifte Klammer versetzen und den FHEM-Code mit fhem "" umschliessen.

Gruß
Dan

Ich habe überall konsequent Perl Code verwendet. Habe auch kein Stress mit den doppelten Semikolons....

DeeSPe

Zitat von: binford6000 am 29 Januar 2017, 11:21:25
Hi Dan,

ich möchte morgens eine Pushnachricht mit FHEM-Updates geschickt bekommen.
Habe das so gelöst:

attr Wohnung HomeCMDdaytime-morning {
  my $a = `wget -qO - http://fhem.de/fhemupdate4/svn/controls_fhem.txt | cat - FHEM/controls_fhem.txt | sort | uniq -u | cut -d " " -f 4 | uniq`."-";; fhem ("set fhemBot msg Folgende Updates sind vorhanden: $a")
}


Allerdings wird nichts ausgelöst. Verwende ich jedoch HomeCMDdnd-on

attr Wohnung HomeCMDdnd-on {
  my $a = `wget -qO - http://fhem.de/fhemupdate4/svn/controls_fhem.txt | cat - FHEM/controls_fhem.txt | sort | uniq -u | cut -d " " -f 4 | uniq`."-";; fhem ("set fhemBot msg Folgende Updates sind vorhanden: $a")
}


bekomme ich eine Nachricht. Was mache ich falsch?

VG Sebastian

Hatte das heute mal probiert und es klappt!!!
Leider zeigt das halt nur das Update von gestern an, da das Update File ja erst gegen 8 Uhr erstellt wird.
HomeCMDdaytime-morning wird aber um 5 Uhr ausgeführt!
Benutze für den Update Check und das Versenden per TelegramBot aber folgenden Perl Code:
{CommandSet(undef,"TB message ".CommandUpdate(undef,"check"))}

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

binford6000

ZitatHatte das heute mal probiert und es klappt!!!

Heute morgen um 5:00 Uhr habe ich auch eine Nachricht bekommen. Das war die erste seit dem 25.01.
Habe allerdings gestern auch ein

set device updateInternalsForce

gemacht.

{CommandSet(undef,"TB message ".CommandUpdate(undef,"check"))}


Ist natürlich etwas eleganter! Aber entscheidend ist was hinten raus kommt... ;)
VG Sebastian

DeeSPe

#174
Nach langem Warten nun hier das Update für das Modul!
Zu finden am Ende des ersten Beitrags.

!!! ACHTUNG !!!
Bitte beim Update des Moduls das Changelog genau beachten!
Es wurden einige Attribute umbenannt und müssen entsprechend von Euch selbst angepasst werden. Da es sich noch um ein Beta Modul handelt habe ich darauf verzichtet eine Funktion zu integrieren die die alten Attribute und Werte automatisch auf die neuen migriert!


Um bei Euch die Attribute umzubenennen empfehle ich AUSNAHMSWEISE mal das manuelle Bearbeiten der fhem.cfg mit "Suchen und Ersetzen". Das dürfte m.E. zum schnellsten Ergebnis führen.

Die Dokumentation in den ersten beiden Beiträgen dieses Themas habe ich entsprechend der Änderungen im Modul angepasst (sofern ich nichts vergessen oder übersehen habe).

Ein paar Ideen habe ich noch zur Erweiterung/Verbesserung des Moduls.
Als nächstes würde ich gerne die meisten Platzhalter komplett los werden wollen.
Ich stelle mir statt dessen eine Syntax für ReadingsVal und ReadingsNum vor ala DOIF. Somit kann man relativ einfach auf beliebige Readings zugreifen ohne immer wieder einen neuen Platzhalter einbauen zu müssen.
Etwa so:
Zugriff auf ein beliebiges ReadingsVal bekäme man mit:
[devicename:readingname]
Zugriff auf ein beliebiges ReadingsNum bekäme man mit:
[devicename:readingname:d]

Changelog:

  • doppelte Semikolon sind nun nicht mehr nötig im Perl Code, das hat allerdings den Nachteil dass man nun keinen Perl Code mehr mit FHEM Code innerhalb eines HomeCMD Attributs mischen kann/sollte
  • HomeSensorTemperature umbenannt in HomeSensorTemperatureOutside
  • HomeSensorHumidity umbenannt in HomeSensorHumidityOutside
  • HomeCMDcontactOpenRetrigger umbenannt in HomeCMDcontactOpenWarning1
  • HomeCMDcontactOpenRetrigger2 umbenannt in HomeCMDcontactOpenWarning2
  • neues Attribut HomeCMDcontactOpenWarningLast
  • HomeSensorsContactOpenTamperReadings umbenannt in HomeSensorsContactReadings
  • HomeSensorsContactOpenTamperVal umbenannt in HomeSensorsContactValues
  • HomeSensorsMotionOpenTamperReadings umbenannt in HomeSensorsMotionReadings
  • HomeSensorsMotionOpenTamperVal umbenannt in HomeSensorsMotionValues
  • userattr HomeOpenTamperReadings (in hinzugefügten Contact/Motion Sensoren) umbenannt in HomeReadings
  • userattr HomeOpenTamperVal (in hinzugefügten Contact/Motion Sensoren) umbenannt in HomeValues
  • Fehler beseitigt bei Kontakt Offen Warnungen
  • Prüfung integriert ob HomeSensorTemperatureOutside und HomeSensorHumidityOutside identisch sind
  • statt des Attributs comment wird nun das Reading HomeInfo für Informationen vom HOMEMODE Device benutzt
  • von allen Bewegungsmeldern wird nun auch ein durchschnittlicher Lichtwert (Reading luminance) berechnet, sofern vorhanden - der neue Platzhalter %LUMINANCE% ist dafür dazu gekommen - dazu kann in den Attributen HomeSensorsMotionReadings und/oder HomeReadings als dritter Wert das Reading für luminance angegeben werden
  • stündliche Ermittlung der Trends von temperature, humidity und luminance - entsprechende Readings werden erstellt und Platzhalter sind verfügbar
  • neues Attribut HomeTrendCalcAge für das maximale Alter der vorherigen Messung - für Trend Berechnung
  • ganze Kommentarzeilen im eigenen Perl Code sind nun zulässig, Kommentare hinter Perl Code am Ende einer Zeile sind weiterhin NICHT zulässig
  • Anfang von Übersetzungen in Deutsch, Hinweise und Fehlermeldungen sind bereits deutsch, Log Einträge bleiben englisch
  • manuelles Setzen von mode ist nun nur noch mit deaktiviertem HomeAutoDaytime möglich (attr <HOMEMODE> HomeAutoDaytime 0)
  • Ausführungsproblem von HomeCMDlocation-.... behoben
  • commandref aktualisiert
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

FranzB94

Hi DeeSPe!

Danke für dieses tolle Modul. Das hat es mächtig in Sich und man braucht schon eine ganze zeit, um sich da einzuarbeiten.
Ich hatte mir eigendlich vorgenommen, Dich bei der Erstellung der Dokumentation in Deutsch zu unterstützen. Aber wie ich lese, hast Du damit schon begonnen. Umso Besser, da Du tief in der Materie steckst. Ich werde mir erlauben Korrektur zu lesen und meine Änderungsvorschläge mitzuteilen.

Ich hätte noch eine Bitte, die Fensterkontakte betreffend: Mein FHT80TF (FS20) meldet Open und Closed. Somit wird er nicht in HOMEMODE erkannt. Vieleicht könntest Du die Abfrage entsprechend erweitern.

Danke Franz     

darkness

#176
Zitat von: FranzB94 am 31 Januar 2017, 14:41:24
Ich hätte noch eine Bitte, die Fensterkontakte betreffend: Mein FHT80TF (FS20) meldet Open und Closed. Somit wird er nicht in HOMEMODE erkannt. Vieleicht könntest Du die Abfrage entsprechend erweitern.

Hey,

du kannst doch selber das Reading anpassen bzw ein regex für die Erkennung erstellen.
Ich hatte das mit den Bewegungsmeldern.


HomeReadings
Zwei leerzeichenseparierte Readings für open und sabotage Status.
Die hier eingetragenen Readings überschreiben die Werte aus dem Attribut HomeSensorsContactReadings des HOMEMODE Device.
Werte: frei wählbar
Werteformat: zwei Wörter
Standardwert: state sabotageError
•HomeValues
Regex der Werte die für offen und sabotiert stehen.
Die hier eingetragenen Werte überschreiben die Werte aus dem Attribut HomeSensorsContactValues des HOMEMODE Device.
Werte: frei wählbar
Werteformat: Regex
Standardwert: open|tilted|on


Bzw. HomeSensorsContactReadings HomeSensorsContactValues  im Device selber.

Müsste doch mit attr <Device> HomeSensorsContactValues Open machbar sein

DeeSPe

Zitat von: FranzB94 am 31 Januar 2017, 14:41:24
Hi DeeSPe!

Danke für dieses tolle Modul. Das hat es mächtig in Sich und man braucht schon eine ganze zeit, um sich da einzuarbeiten.
Ich hatte mir eigendlich vorgenommen, Dich bei der Erstellung der Dokumentation in Deutsch zu unterstützen. Aber wie ich lese, hast Du damit schon begonnen. Umso Besser, da Du tief in der Materie steckst. Ich werde mir erlauben Korrektur zu lesen und meine Änderungsvorschläge mitzuteilen.

Ich hätte noch eine Bitte, die Fensterkontakte betreffend: Mein FHT80TF (FS20) meldet Open und Closed. Somit wird er nicht in HOMEMODE erkannt. Vieleicht könntest Du die Abfrage entsprechend erweitern.

Danke Franz     

Das Übersetzen der commandref habe ich noch nicht begonnen! Darfst damit aber gerne anfangen! ;)

Wie darkness schon geschrieben hat führen wie immer mehrere Wege ans Ziel.
Falls nötig könnte man in den betreffenden Devices auch userReadings anlegen die den Zustand besser darstellen.

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

darkness

Hallo DeeSPe,

ich hätte noch eine Frage bezüglich der Readings energy.
Ich verwende von Fibaro den Wallplug sowie HM Zwischensteckdosen.

Fiabro hat energy-Werte in Form von 1234,45 kWh
HM hat: 123456 (ich nehme mal an Wh)

Wird das durch dein Modul berücksichtigt bzw. kann man dort einen Umrechnungsfaktor hinzufügen?

Bisher habe ich die Geräte nicht zum HOMEMODE hinzugefügt. Ist mir aber nur jetzt schon aufgefallen.


DeeSPe

Zitat von: darkness am 31 Januar 2017, 14:57:34
Hallo DeeSPe,

ich hätte noch eine Frage bezüglich der Readings energy.
Ich verwende von Fibaro den Wallplug sowie HM Zwischensteckdosen.

Fiabro hat energy-Werte in Form von 1234,45 kWh
HM hat: 123456 (ich nehme mal an Wh)

Wird das durch dein Modul berücksichtigt bzw. kann man dort einen Umrechnungsfaktor hinzufügen?

Bisher habe ich die Geräte nicht zum HOMEMODE hinzugefügt. Ist mir aber nur jetzt schon aufgefallen.



Nein, das wird bisher nicht berücksichtigt.
Ausweg wäre hier auch klassisch ein entsprechendes userReading welches die Umrechnung übernimmt.
Du könntest auch mit readingsChange rangehen wenn nötig.

Mit fehlte bisher die Zeit um mich mit dem Units Modul zu beschäftigen. Wenn das alles Nötige für die entsprechenden Einheitenkonvertierungen mitbringt, dann integriere ich das gerne noch irgendwann.
Solange bleiben die beiden o.g. Möglichkeiten offen.

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