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

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

Vorheriges Thema - Nächstes Thema

Guenni1404

Hi Dan,

Problem gelöst.
Ich habe beim Resident einmal "event-on-change-reading" auf .* gesetzt und wieder gelöscht. Danach ging es - komisch.

DeeSPe

Zitat von: Guenni1404 am 19 Dezember 2022, 18:08:40
Hi Dan,

Problem gelöst.
Ich habe beim Resident einmal "event-on-change-reading" auf .* gesetzt und wieder gelöscht. Danach ging es - komisch.

Klingt komisch, aber wenn es nun funktioniert ist ja alles gut.

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

Guenni1404

Hallo Dan,
je weiter ich mich in dein Modul einarbeite desto besser finde ich es.
Zur Zeit versuche ich mich am Wetter.

Meine Frage:
Welches Reading benötige ich im Wetterdevice, damit "sensorsTampered_ct" gefüllt wird?
Steht bei mir immer auf "0".


DeeSPe

Zitat von: Guenni1404 am 29 Dezember 2022, 17:43:59
Welches Reading benötige ich im Wetterdevice, damit "sensorsTampered_ct" gefüllt wird?
Steht bei mir immer auf "0".

Hallo Guenni,

das Reading hat überhaupt nichts mit irgendeinem Wetterdevice zu tun.
Das Reading wird normalerweise durch Kontaktsensoren bedient wenn diese sabotiert werden.
Bei meinen Homematic beispielsweise wenn diese geöffnet werden um an die Batterie heranzukommen und diese zu wechseln.

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

Guenni1404

Sorry,

ich bin total durcheinander gekommen. Ich meinte "%WINDCHILL%". Da bekomme ich immer eine 0 wenn ich meine Wetterdaten zusammenstelle.

DeeSPe

Zitat von: Guenni1404 am 29 Dezember 2022, 17:55:08
Ich meinte "%WINDCHILL%". Da bekomme ich immer eine 0 wenn ich meine Wetterdaten zusammenstelle.

Woher kommen Deine Wetterdaten?
%WINDCHILL% ist nur verfügbar wenn Du ein Weather-Device eingebunden hast, dann wird das Reading "apparentTemperature" vom Weather-Device ausgelesen und in diesem Platzhalter zur Verfügung gestellt.

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

Guenni1404

Ich bekomme die Daten über die OpenWeatherMapAPI.
Da gibt es für die gefühlte Temperatur das Reading "tempFeelsLike_c". Das biege ich mich dann einfach per userreading auf  "apparentTemperature" um. Das passt.

Danke

sTaN

Hi Dan,

nach wie vor bin ich total begeistert von HOMEMODE und versuche alles weitestgehend darüber abzubilden.
Ich habe noch zwei offene Themen/Fragen:

1. Gibt es eine Möglichkeit über HOMEMODE den Batteriewechel zu dokumentieren bzw. diesen zu erkennen zu lassen?

Habe dazu diesen Thread gefunden: https://forum.fhem.de/index.php/topic,82637.0.html

Vielleicht existiert hier was vergleichbares in HOMEMODE?

2. Wird aktuell auf den Sonos Lautsprechern Musik über z.B.: Spotify wiedergegeben (Zum Beispiel über Handy meiner Frau oder meins angestoßen) oder gerade über Alexa die tägliche Zusammenfassung (Nachrichten etc.) abgespielt und es kommt in dieser Zeit z.B. die Nachricht "Das Fenster im Bad ist noch offen", unterbricht er die aktuelle Wiedergabe und startet anschließend immer die gleiche Spotify Playlist, anstatt das bisher abgespielte weiterzuspielen. Gibt es eine Möglichkeit die aktuelle Wiedergabe nicht zu stoppen und die Fenster offen Meldung quasi nur "darüber" zu legen und die aktuelle Wiedergabe z.B.: leiser zu regeln?

Folgende Attribut Konfiguration für die HomeCMDcontactOpenWarning's verwende ich:

HomeCMDcontactOpenWarning1
{
  my $a = "%ALIAS%";
  $a =~ s/d/D/;
  my $s = "%SENSOR%";
  my $m = "%MODE%";
  my $r_asleep = ReadingsVal("rgr_Bewohner","residentsAsleep","");
  my $guests = ReadingsVal("UnifiController","-UC_wlan_guests","");
 
  if ($s eq "FK_Schlafzimmer" || $s eq "TK_Schlafzimmer" || $s eq "FensterTestDummy") {
   fhem("msg push \@[rgr_Bewohner:residentsHomeDevs] |Fenster offen| 1. Meldung: $a ist noch offen!");
   #Wenn kein Bewohner schläft, Sprachbenachrichtigung über Sonos Lautsprecher
  if ($m eq "asleep" || $r_asleep < 1 && $guests == 0) {
   fhem("msg audio \@Sonos_Kueche,Sonos_Buero $a ist noch offen");
   }
  } elsif ($s eq "FK_Bad" && $guests == 0) {
   fhem("msg audio \@Sonos_Kueche,Sonos_Buero $a ist noch offen");
   fhem("msg push \@[rgr_Bewohner:residentsTotalPresentDevs] |Fenster offen| 1. Meldung: $a ist noch offen!");
  } else {
   #Pusover an alle Bewohner, die zu Hause sind
   fhem("msg push \@[rgr_Bewohner:residentsTotalPresentDevs] |Fenster offen| 1. Meldung: $a ist noch offen!");
  }
}


Vielleicht ist das 2. Thema auch nichts für diesen Thread, aber hatte schon vor langer Zeit das Thema separat hier aufgemacht und leider keine Rückmeldung oder Lösung erhalten.

Gruß und Danke
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

DeeSPe

Zitat von: sTaN am 04 Januar 2023, 21:59:30
1. Gibt es eine Möglichkeit über HOMEMODE den Batteriewechel zu dokumentieren bzw. diesen zu erkennen zu lassen?

Nein! Eine Automatik dafür habe ich bewusst nicht implementiert da ich dafür bisher keine gute Lösung gefunden habe. Das Hauptproblem ist dass der Batteriestand eigentlich immer "flattert". Das heißt sie zeigen immer mal wieder kurz einen geringen Batteriestand an um danach wieder auf "normal" zu gehen. Zumindest ist das bei mir bei nahezu allen Geräten der Fall.
Aber es spricht ja nichts dagegen dass man sich nach einem Batteriewechsel das Wechseldatum manuell in den Sensor z.B. in das Attribut "comment" schreibt.

Zitat von: sTaN am 04 Januar 2023, 21:59:30
2. Wird aktuell auf den Sonos Lautsprechern Musik über z.B.: Spotify wiedergegeben (Zum Beispiel über Handy meiner Frau oder meins angestoßen) oder gerade über Alexa die tägliche Zusammenfassung (Nachrichten etc.) abgespielt und es kommt in dieser Zeit z.B. die Nachricht "Das Fenster im Bad ist noch offen", unterbricht er die aktuelle Wiedergabe und startet anschließend immer die gleiche Spotify Playlist, anstatt das bisher abgespielte weiterzuspielen. Gibt es eine Möglichkeit die aktuelle Wiedergabe nicht zu stoppen und die Fenster offen Meldung quasi nur "darüber" zu legen und die aktuelle Wiedergabe z.B.: leiser zu regeln?

Dieser Zustand hat überhaupt nichts mit HOMEMODE zu tun, denn aus den HomeCMDs kommt ja nur der Code dass etwas abgespielt werden soll.
Die Verarbeitung erfolgt ja dann bei dir als erstes von MSG und dann von SONOS/SONOSPLAYER.
M.E. müsste das im SONOS/SONOSPLAYER Modul gefixt werden, aber der Maintainer ist seit Langem nicht mehr hier gesehen worden.

Es tut mir leid Dich bei Deinen beiden Fragen enttäuschen zu müssen.

Aber nur mal so noch als kleiner Hinweis:
Die Entscheidung wann ein Sound ausgegeben werden oder die Ausgabe doch lieber still (z.B. per Push Nachricht) erfolgen soll, würde ich in eine eigene Funktion in die myUtils auslagern.
Ich habe bspw. eine Funktion "speak" erstellt, dieser kann ich den auszugebenen Text und den Player angeben auf dem ausgegeben werden soll.
Hier mal meine Funktion, wenn Du Fragen dazu hast, dann frag.
sub speak
{
  my $tx = shift;
  my $dev = shift;
  $dev = 'wz_Sonos' if (!$dev);
  my $res = devspec2array("msgContactAudio=$dev");
  $tx = 'Das ist ein ganz einfacher Sprachausgabetest.' if (!$tx);
  my $jin = $tx =~ m/^\|/x ? '' : '|Computer-Magic| ';
  if (($dev eq 'wz_Sonos' && devState('rgr_Residents') =~ m/^absent|gone$/x) || (devState('rgr_Residents') =~ m/^asleep$/x && ReadingsAge('rgr_Residents','state',1) > 60)) {
    fhem 'msg push @rgr_Residents '.$tx;
  } elsif ($res && (devState($res) =~ m/^asleep$/x && ReadingsAge($res,'state',1) > 60) || devState($res) =~ m/^absent|gone$/x) {
    fhem 'msg push @'.$res.' '.$tx;
  } else {
    fhem 'msg audio @'.$dev.' '.$jin.$tx.' O[{"VOLUME":"'.SayVolume($dev).'"}]';
  }
  return undef;
}


"devState()" ist meine Funktion die mir immer das Reading "state" eine Geräts zurückgibt, das ist mir lieber als die "ungenaue" Funktion "Value()" zu benutzen oder die längere Funktion "ReadingsVal()" :
sub devState
{
  my $name = shift;
  return undef if (!defined $name);
  return ReadingsVal($name,'state',undef);
}


Die Funktion "SayVolume()" ist auch eine eigene Funktion von mir und die gibt mir der Uhrzeit entsprechend einen Lautstärkewert zurück. Dabei wird auch beachtet ob evtl. schon Bewohner schlafen.

Ergänzend zu der Funktion "speak()" habe ich noch einen cmdalias angelegt damit "speak" auch als FHEM Befehl zur Verfügung steht, dabei kann dann aber kein Player mehr mit übergeben werden:
define ca_speak cmdalias speak .* AS {speak $EVENT}

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

sTaN

Zitat von: DeeSPe am 04 Januar 2023, 22:37:23
Nein! Eine Automatik dafür habe ich bewusst nicht implementiert da ich dafür bisher keine gute Lösung gefunden habe. Das Hauptproblem ist dass der Batteriestand eigentlich immer "flattert". Das heißt sie zeigen immer mal wieder kurz einen geringen Batteriestand an um danach wieder auf "normal" zu gehen. Zumindest ist das bei mir bei nahezu allen Geräten der Fall.
Aber es spricht ja nichts dagegen dass man sich nach einem Batteriewechsel das Wechseldatum manuell in den Sensor z.B. in das Attribut "comment" schreibt.

Schade! Aber dennoch ein toller Hinweis. Habe das Attribut comment bis dato auch noch gar nicht bemerkt!  ;D
Zitat von: DeeSPe am 04 Januar 2023, 22:37:23
Aber nur mal so noch als kleiner Hinweis:
Die Entscheidung wann ein Sound ausgegeben werden oder die Ausgabe doch lieber still (z.B. per Push Nachricht) erfolgen soll, würde ich in eine eigene Funktion in die myUtils auslagern.

Gibt es gute Gründe, weshalb du die Auslagerung in myUtils empfiehlst?
Oder empfindest du meine Lösung eher als "unsexy" und zu kompliziert?  ;D

Wobei ich natürlich immer offen für Optimierungen bin, aber denke ich müsste deine Lösung noch stark anpassen zwecks Prüfung Gäste WLAN etc.

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

DeeSPe

Zitat von: sTaN am 08 Januar 2023, 20:18:01
Gibt es gute Gründe, weshalb du die Auslagerung in myUtils empfiehlst?
Oder empfindest du meine Lösung eher als "unsexy" und zu kompliziert?  ;D

Ganz einfach: Wiederverwendbarkeit!
Egal wo ich "speak" verwende, es unterliegt immer den gleichen Bedingungen.
Das hat weder was mit "sexy" zu tun, noch mit Komplexität.
Ganz im Gegenteil, ausgelagert kannst Du das so komplex bauen wie Du möchtest oder wie es eben nötig ist.

Zitat von: sTaN am 08 Januar 2023, 20:18:01
Wobei ich natürlich immer offen für Optimierungen bin, aber denke ich müsste deine Lösung noch stark anpassen zwecks Prüfung Gäste WLAN etc.

Das ist ja auch nur ein Vorschlag gewesen.
Ob und wie Du das an Deine Umgebung anpasst ist rein Dir überlassen.

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

sTaN

Zitat von: DeeSPe am 08 Januar 2023, 21:00:30
Ganz einfach: Wiederverwendbarkeit!

Danke Dan, dass dachte ich mir fast. Werde mich dem bei der nächsten freien Zeit mal annehmen! :)
Bin natürlich immer dankbar für Vorschläge und Optimierungen!

Gruß
sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

Badflex

Hallo,
habe meinen Batteriestatus in Homemode eingetragen. Leider habe ich auch mehrere Netatmo Geräte die den Batteriestatus als batteryState anzeigen.
Die Geräte findet er nicht.
Wie kann ich das ändern?
Vielen Dank
Raspberry Pi, CUL868(SlowRF), FB 7490, SmartVisu, fast nur HomeMatic wenig FS20, Netatmo

DeeSPe

Zitat von: Badflex am 25 Januar 2023, 10:59:30
Leider habe ich auch mehrere Netatmo Geräte die den Batteriestatus als batteryState anzeigen.
Die Geräte findet er nicht.
Wie kann ich das ändern?

userReadings "battery" anlegen.

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

Guenni1404

Hey,

ich habe folgendes Problem:

Ich habe ein Kalender Device mit Terminen.
Im Homemode ist der Kalender eingetragen und über updateInternalForce aktualisiert worden.
Das Kalender Device hat getriggert:
define CALENDAR_FHEM Calendar ical url XXX 7200
attr CALENDAR_FHEM hideOlderThan 05:00
attr CALENDAR_FHEM room Kalender->00_alle
#   CFGFN     
#   DEF        ical url XXX 7200
#   FUUID      63d6a239-f33f-5815-23d2-d147b522bdbae4c2
#   NAME       CALENDAR_FHEM
#   NOTIFYDEV  global
#   NR         432112
#   NTFY_ORDER 50-CALENDAR_FHEM
#   STATE      triggered
#   TYPE       Calendar
#   eventCount 159
#   READINGS:
#     2023-01-30 19:45:53   calname         FHEM
#     2023-01-30 19:45:53   lastUpdate      2023-01-30 19:45:52
#     2023-01-30 19:45:53   nextUpdate      2023-01-30 21:45:52
#     2023-01-30 21:25:00   nextWakeup      2023-01-30 21:45:52
#     2023-01-30 21:25:00   state           triggered
#
setstate CALENDAR_FHEM triggered
setstate CALENDAR_FHEM 2023-01-30 19:45:53 calname FHEM
setstate CALENDAR_FHEM 2023-01-30 19:45:53 lastUpdate 2023-01-30 19:45:52
setstate CALENDAR_FHEM 2023-01-30 19:45:53 nextUpdate 2023-01-30 21:45:52
setstate CALENDAR_FHEM 2023-01-30 21:25:00 nextWakeup 2023-01-30 21:45:52
setstate CALENDAR_FHEM 2023-01-30 21:25:00 state triggered



Im Homemode kommt beim Kalendeevent
2023-01-30 21:25:00   event-CALENDAR_FHEM none

Wo liegt mein Fehler?