Anwesenheitserkennung mit 4 GTAGs, leicht erweiterbar

Begonnen von skydns, 04 Januar 2017, 22:16:40

Vorheriges Thema - Nächstes Thema

skydns

Hallo,
ich nutze Gigaset G-TAGs zur Alarmierung bei öffnen und schließen von Türen und zur Anwesenheitserkennung um die Alarmierung zu aktivieren bzw. deaktivieren. In diesem Fall möchte ich mein Anwesenheitsscript zur Benachrichtigung auch anderen zur Verfügung stellen. Ich persönlich finde das es eigentlich mit ins Wiki "Anwesenheitserkennung" gehört.

In meinem Fall eine Familie mit 2 Kindern. Aktiviert wird die Alarmierung nur von den Eltern über Anwesenheitserkennung. Ich will über die Anwesenheit, sowie beim Verlassen des Hauses der Kinder benachrichtigt werden, wenn die Eltern nicht anwesend sind.


Zunächst mal eine Aufzählung von nötigen Vorraussetztungen:
-Ein funktionierendes lepresenced Script
Anleitung im Wiki abarbeiten
https://wiki.fhem.de/wiki/Anwesenheitserkennung

-Einen Alarm dummy
define Alarm dummy
attr Alarm devStateIcon aktiv:secur_locked@red inaktiv:secur_open@lightgreen
attr Alarm eventMap on:aktiv off:inaktiv
attr Alarm setList on off
attr Alarm webCmd aktiv:inaktiv
attr Alarm room Alarm

-5 Angelegte G-TAGs (Ich nutze bisher nur 4, habe jedoch auch den 5ten schon vorbereitet)
Wichtig zu wissen auch wenn es eigentlich klar sein sollte, die GTAGS dürfen nicht mit einem anderen Gerät gekoppelt sein (Die App am besten vom Smartphone löschen).
Die Bluetoothadresse kann man mit
sudo hci-tool lescan
auslesen

Anlegen mit der entsprechenden Bluetoothadresse:
define gtag_rot PRESENCE lan-bluetooth 00:00:00:00:00:00 127.0.0.1:5333 90
attr gtag_rot absenceThreshold 3
attr gtag_rot alias Mustermann
attr gtag_rot event-on-change-reading presence
attr gtag_rot eventMap maybe.absent:vielleicht_unterwegs absent:unterwegs present:anwesend
attr gtag_rot group gtag
attr gtag_rot room Alarm,Benachrichtigungen

Das ist mit allen GTAGs zu wiederholen, meine GTAGS:
Diese Namen sollten so übernommen werden für das unten folgende Script! Klartextnamen müssen für das Skript über Alias angelegt werden (z.B. Marco, Frida, Max, Gast
gtag_rot (Eltern)
gtag_schwarz (Eltern)
gtag_gruen (Kind)
gtag_orange (Gast)

Eine Art von Pushbenachrichtigung, in meinem Beispiel "Pushover" (4,99€ einmalig pro Gerät). Im Prinzip jedoch egal was man da nimmt, auch "Telegam" (kostenlos) und andere wären möglich.
Anleitung im Wiki abarbeiten:
https://wiki.fhem.de/wiki/Pushover

Hier das eigentliche Script der Anwesenheitserkennung / Anwesenheitsbenachrichtigung:

Notify anlegen
define gtag_anwesenheit notify a b
dann das Notify öffnen und auf "DEF" klicken und "a b" durch den folgenden Code ersetzen.

gtag.*.presence:.* {
my $ALIASNAME = AttrVal($NAME,'alias',$NAME);
my $GTAG1 = Value("gtag_rot");
my $GTAG2 = Value("gtag_schwarz");
my $GTAG3 = Value("gtag_gruen");
my $GTAG4 = Value("gtag_orange");
my $GTAG = Value("$NAME");

Log 1, "$ALIASNAME ist $GTAG.";
if (($EVTPART1 eq "anwesend" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME ist da...'");
}
elsif (($EVTPART1 eq "anwesend" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_rot" xor $NAME eq "gtag_schwarz")) {
fhem("set Infopush msg 'ALARMIERUNG INAKTIV' '$ALIASNAME ist da...'; set Alarm inaktiv");
}
elsif (($EVTPART1 eq "unterwegs" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME hat das Haus verlassen.'");
}
elsif (($EVTPART1 eq "unterwegs" && Value("Alarm") eq "inaktiv") && ($GTAG1 eq "unterwegs" && $GTAG2 eq "unterwegs")) {
fhem("set Alarm aktiv; set Infopush msg 'ALARMIERUNG AKTIV' '$ALIASNAME hat als letztes das Haus verlassen.' '' 0 ''");
}
}


Bei mir funktioniert es so Prima, an dieser Stelle auch einen großen DANK an alle Forumaktiven.


Zur Erklärung und weitere Erläuterungen:
Der Alarm dummy hat den zustand on:off da ich Ihn auch über "Homekit" steuere. Da ich bei mir FEHM weitestgehend auf deutsch übersetze nutze ich eventMap. Wenn die von mir angewandten Übersetzungen nicht 1:1 übernommen werden funktioniert das Script nicht, bzw. muss angepasst werden (z.B. absent:unterwegs und present:anwesend). Anwesend / Abwesend lässt sich beim überfliegen der Texte schlecht auseinanderhalten daher habe ich mich für unterwegs statt abwesend entschieden. Es wird außerdem immer ein Log-Eintrag erzeugt, so das ich bei bedarf Rückwirkend nachprüfen kann.

Bilder im Anhang wie es ausehen könnte.
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

Devender

Moin,

Klingt gut. Da ich den Bereich im Wiki angelegt habe und soweit es zeitlich klappt auch Pflege wuerde
Ich deine Skripte dort einpflegen und dir dann noch mal bescheid geben, das du quer lesen kannst.
Den Bereich mit Einrichtung wuerde ich allerdings nicht doppelt aufführen wollen.

Viele Gruesse,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

CoolTux

Hallo skydns

Du hast Dir gute Gedanken gemacht und Zeit in Deine Arbeit investiert. Danke das Du dies teilst. Lass mich bitte dennoch ein zwei Anmerkungen machen, gerade da Deine Arbeit den Weg ins Wiki finden soll.

1. Dein Notify würde ich in eine 99_myUtils Sub auslagern. Es empfiehlt sich immer Notifys mit größeren Code Aufkommen aus zu lagern
2. Viele User welche Presence verwenden, verwenden auch Residents und Roommates. Hier bietet es sich an entsprechende Benachrichtigungen in den Skripten home/absent ein zu tragen.



Grüße
Leon
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

skydns

#3
Danke für die Tipps, für Hinweise bin ich immer dankbar. Da ich noch ein ziehmlicher Neuling bin sind mir RESIDENTS und ROOMMATES noch keine geläufigen Funktionen. Schau ich mir aber gern an. FHEM wächst bei mir immer weiter, das wird bei vielen wohl ähnlich sein. Wird irgendwie zur Sucht  :o

Die großen Notifys in die 99_Utils auszulagern werd ich als erstes umsetzen, das ist noch einfach. An dem Script hab ich lang gesessen, wenn es ergänzend zum wiki hinzugefügt wird fühle ich mich geehrt  :D

Das muss natürlich nicht doppelt rein, das Script als Ergänzung sollte reichen. Wer soweit gekommen ist, hat meiner Meinung nach schon das meiste Verstanden.

Da es fehlerfrei funktioniert, freuen sich bestimmt auch andere. Bin auch dankbar, wenn ich hier und da ein paar funktionierende Codeschnipsel finde.

LG Marco
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

DeeSPe

Zitat von: skydns am 09 Januar 2017, 22:01:16
Danke für die Tipps, für Hinweise bin ich immer Dankbar. Da ich noch ein ziehmlicher Neuling bin sind mir RESIDENTS und ROOMMATES noch keine geläufigen Funktionen. Schau ich mir aber gern an.

Wenn Du dann mal soweit bist RESIDENTS kann Du Dir gern auch mal mein neues Modul anschauen.
Das bringt bereits eine sehr gute Integration von Presence Devices jeglicher Form mit und geht diesbezüglich noch 2-3 Schritte weiter. ;)
Auch evtl. nützliche andere Funktionen zur Automation sind bereits gebrauchsfertig enthalten.

Gruß
Dan

P.S. Sorry für's Werbung machen... ::)
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

skydns

So sieht das ganze nun für 99_myUtils aus:

Das Notify
gtag.*.presence:.* {Anwesenheit_check("$EVTPART1", "$NAME")}

99_myUtils
### GTAG ANWESENHEITS CHECK
sub Anwesenheit_check($$) {
my ($EVENT, $NAME) = @_;
my $ALIASNAME = AttrVal($NAME,'alias',$NAME); # ALIAS des GTAGs auslesen
my $GTAG1 = Value('gtag_rot'); # ELTERN
my $GTAG2 = Value('gtag_schwarz'); # ELTERN

Log 1, "$ALIASNAME ist $EVENT."; # LOG Eintrag erzeugen

if (($EVENT eq "anwesend" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME ist da...'");
}
elsif (($EVENT eq "anwesend" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_rot" xor $NAME eq "gtag_schwarz")) {
fhem("set Infopush msg 'ALARMIERUNG INAKTIV' '$ALIASNAME ist da...'; set Alarm inaktiv");
}
elsif (($EVENT eq "unterwegs" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME hat das Haus verlassen.'");
}       
elsif (($EVENT eq "unterwegs" && Value("Alarm") eq "inaktiv") && ($GTAG1 eq "unterwegs" && $GTAG2 eq "unterwegs")) {
fhem("set Alarm aktiv; set Infopush msg 'ALARMIERUNG AKTIV' '$ALIASNAME hat als letztes das Haus verlassen.' '' 0 ''");
}
}


Das mit Roomate wird bei mir noch eine Weile dauern.
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

skydns

#6
Hier nun die Erweiterung für ROOMMATE, ich habe dazu eine weitere Funktion geschrieben für die Residents Benutzer. Man kann es bei Bedarf also ergänzen.

Das Notify muss ergänzt werden und hat dann diesen Inhalt:
gtag.*.presence:.* {
Anwesenheit_check("$EVTPART1", "$NAME"),
Anwesenheit_check_resi("$NAME")
}


99_myUtils.pm
### RESIDENTS
sub Anwesenheit_check_resi($) {
my ($NAME) = @_;
my $ALIASNAME = AttrVal($NAME,'alias',$NAME); # ALIASNAME des GTAGs auslesen
my $RESIUSER = "rr_"; # rr_ Residents Roommate rg_ für Residents Guest
my $ROOMMATE = ("$RESIUSER" . "$ALIASNAME"); # Residentsname zusammenbauen

if (ReadingsVal($NAME,'presence',$NAME) eq "absent") {
fhem("set $ROOMMATE absent"); # Resisents Status von Roommates setzen
}
elsif(ReadingsVal($NAME,'presence',$NAME) eq "present") {
fhem("set $ROOMMATE home"); # Resisents Status von Roommates setzen
}

}


Da bei Residents die Benutzernamen unterschiedlich sind für Bewohner (beginnend mit "rr_") und Gäste (beginnend mit "rg_") habe ich mich erstmal für die Bewohner entschieden, da mir das Wissen fehlt wie man z.B. die Variable dazu unterschiedlich belegt.

EDIT: Ich habe unten noch zwei Bilder angehängt, so würde es dann in Residents bzw. die Log dazu aussehen.
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

Devender

FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

skydns

Ergänzend dazu, wer über Tür und Fensterkontakte benachrichtigt werden will:

Codes für Fenster-/Türkontakte:

Vorraussetzung ist, das die Kontakte so heißen:
Kontakt_00
Kontakt_01
Kontakt_02
usw...
dazu dann Aliasnamen im Klartext z.B. Haustür

Notifys:
define Alarm_Kontaktmeldung notify Kontakt.*:contact:.* {Kontakt_Meldung("$EVTPART1", "$NAME")}
define Alarm_Sabotagealarm notify Kontakt.*.sabotageError:.on {Kontakt_Sabotage("$EVTPART1", "$NAME")}

99_myUtils.pm
### TÜRKONTAKTE-Meldung/Zustand
sub Kontakt_Meldung($$) {
my ($EVENT, $NAME) = @_;
my $ALIASNAME = AttrVal($NAME,'alias',$NAME);
Log 1, "$ALIASNAME wurde $EVENT";
if (ReadingsVal("Alarm", "state", "on") eq "on") {
fhem("set teleBot send $ALIASNAME wurde $EVENT"); # Nachricht über Telegram
# fhem("set Infopush msg '$ALIASNAME' '$ALIASNAME wurde $EVENT'"); # Nachricht über Pushover
}
}

### TÜRKONTAKTE-Sabotagealarm

sub Kontakt_Sabotage($$) {
my ($EVENT, $NAME) = @_;
my $ALIASNAME = AttrVal($NAME,'alias',$NAME);
Log 1, "$ALIASNAME meldet Sabotagealarm";
fhem("set teleBot send Alarm: $ALIASNAME meldet Sabotagealarm"); # Nachricht über Telegram
# fhem("set Infopush msg 'Alarmanlage' '$ALIASNAME meldet Sabotagealarm' '' 2 ' ' 60 600 "); # Nachricht über Pushover
}


Gruß Marco

NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

UliM

Hi,
gute Sache, Danke!

Welchen Bluetooth-Empfänger nutzt du? Ich hab nen RPI und wäre interessiert welche devices da funktionieren und wie man sie einbindet. Gibt's da schon irgendwo Info?

Auch würden mich deine Erfahrungswerte zu Reichweite interessieren. Geht Anwesenheitserkennung pro Raum?
Gruß Uli
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Devender

Hi Uli,

die getesten Tags kannst du hier finden:
https://wiki.fhem.de/wiki/Anwesenheitserkennung#Anwesenheitserkennung_Bluetooth_PebbleBee_mit_PRESENCE_Modul.

Die Reichweit der G-Tags ist wirklich von den Örtlichkeiten und Temperaturen abhängig. Der eine Tag in Auto 1 in der Betongarage wird immer erkannt. Der zweite im Auto in der Einfahrt
und etwa 4 Meter weiter weg vom PI wird meist nicht erkannt (liegt hier aber wirklich an der Kälte).

Anwesenheitserkennung pro Raum geht mit dieser Methode allerdings nicht.

Grüße,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

skydns

Ich nutze den internen Bluetooth Empfänger vom RPi, hab aber auch schon drüber nachgedacht einen weiteren per USB zu verbinden. Das würde sich etwas blockieren, wenn man z.B. noch eine Bluetooth Maus oder ähnliches verbinden möchte.
Die Reichweite ist wirklich sehr abhängig von den individuellen Gegebenheiten vor Ort.
Meine Erfahrungen mit der Reichweite sind ca. 7,5-15m auch über mehrere Räume hinweg. In der Regel sind die GTAGs ja am Schlüsselbund und die bleiben meist in der Jacke. Hängen also im Flur an der Garderobe. Auch durch eine Betondecke werden sie z.B. im Keller erkannt, da wird es dann aber auch schon schwierig.
Beim Schneefegen (15-30m) werde ich manchmal als "maybe absent" erkannt. Dazu habe ich absenceThreshold "3" eingestellt. Damit kommt es nicht zu Fehlerkennungen.

Etwas Probleme hatte ich mit dem Auslesen der Batterie. So wie im Wiki beschrieben hat lebattery bei mir nicht funktioniert, ich habe aber in diesem Forum einen anderen Beitrag dazu gelesen. Dieser funktioniert bei mir fehlerfrei. Das könnte ich bei Interesse auch noch mal raussuchen.

Gruß Marco
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

skydns

Inzwischen habe ich mich weiter mit dem Residents Modul auseinander gesetzt, es bringt schon so viel mit sich, das ich meine Anwesenheitserkennung stark angepasst habe.
Für die Überarbeitung des Wikis:

Der Alarm Dummy für die  Benachrichtigung bleibt.

Noch mal von Anfang

Die GTAGs sind angelegt, das attr eventMap habe ich wieder gelöscht, so dass mir der Zustand wieder auf englisch in absent/present angezeigt wird.
Namen der TAGs:
gtag_rot
gtag_schwarz
gtag_gruen
gtag_orange

Optional kann man für die Übersicht noch einen "Alias" Namen vergeben.

Bei mir sehen die Eigenschaften jedes GTAGs dann so aus:

defmod gtag_gruen PRESENCE lan-bluetooth 00:00:00:00:00:00 127.0.0.1:5333 90
attr gtag_gruen absenceThreshold 3
attr gtag_gruen alias Frida
attr gtag_gruen event-on-change-reading .*
attr gtag_gruen group Gigaset
attr gtag_gruen room Alarm,Benachrichtigungen
attr gtag_gruen userReadings battery

Das Notify dazu:
define AnwesenheitCheck notify gtag.*.presence:.* {Anwesenheit_check("$EVTPART1", "$NAME")}

Im Residents Modul müssen die Bewohner angelegt werden, sie müssen den Namen der GTAGs haben, auch im Residents Modul können Aliasnamen vergeben werden.
Die folgenden Attribute müssen bei den Bewohnern in Residents angepasst werden:
attr rr_gtag_gruen alias Frida
attr rr_gtag_gruen group Bewohner
attr rr_gtag_gruen rr_realname alias

und das Attribut rr_presenseDevice bekommt den Namen des dazugehörigen  GTAGs. Damit wird dann schon automatisch der Status des Rommates geändert.
Bsp.:
attr rr_gtag_gruen rr_presenceDevices gtag_gruen
evt. auch interessant für andere ist das Attribut "rr_autoGoneAfter", sollte der Bewohner X das Haus länger als X Stunden nicht verlassen, wird er auf "gone" gesetzt und nicht weiter bei der Anwesenheitserkennung berücksichtigt. Verlässt dieser das Haus, wird der Zustand automatisch wieder erfasst.

Die 99myUtils.pm wird mit dem folgenden Code ergänzt, Vorraussetzung ist eine eingerichtete Pushbenachrichtigung über Telegram oder Pushover. Hier müssen die Namen der Pushdevices angepasst werden.


### GTAG ANWESENHEITS CHECK
sub Anwesenheit_check($$) {
my ($EVENT, $NAME) = @_;

# gtag_rot - Alias Marco
# gtag_schwarz - Alias Ulli
# gtag_gruen - Alias Frida
# gtag_orange - Alias Hannah

my $RESIDENT = "rr_"; # Alle GTAGs sind Standardmäßig Residents Roommate
# $RESIDENT = "rg_" if (($NAME eq "gtag_orange") xor ($NAME eq "gtag_weis")); # Hier nur Gäste (Roomguest) Auskommentiert, da ich es so nicht brauche
my $ROOMMATE = ("$RESIDENT" . "$NAME"); # Residentsname zusammenbauen
my $ALIASNAME = AttrVal($ROOMMATE,'alias',$ROOMMATE); # ALIAS des Roommates auslesen

my $GTAG1 = Value('gtag_rot'); # ELTERN
my $GTAG2 = Value('gtag_schwarz'); # ELTERN

my $STATUS = "wahrscheinlich gerade los";
$STATUS = "anwesend" if ($EVENT eq "present"); # Status: anwesend
$STATUS = "unterwegs" if ($EVENT eq "absent"); # Status: unterwegs

Log 1, "$ALIASNAME ist $STATUS."; # LOG Eintrag erzeugen

if (($EVENT eq "present" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
fhem("set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME ist da..."); # Telegram
# fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME ist da...'"); # Pushover
}
elsif (($EVENT eq "present" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_rot" xor $NAME eq "gtag_schwarz")) {
fhem("set teleBot send ALARMIERUNG INAKTIV: $ALIASNAME ist da...; set Alarm inaktiv"); # Telegram
# fhem("set Infopush msg 'ALARMIERUNG INAKTIV' '$ALIASNAME ist da...'; set Alarm inaktiv"); # Pushover
}
elsif (($EVENT eq "absent" && Value("Alarm") eq "aktiv") && ($NAME eq "gtag_gruen" xor $NAME eq "gtag_orange")) {
fhem("set teleBot send ALARMIERUNG BLEIBT AKTIV: $ALIASNAME hat das Haus verlassen."); # Telegram
# fhem("set Infopush msg 'ALARMIERUNG BLEIBT AKTIV' '$ALIASNAME hat das Haus verlassen.'"); # Pushover
}
elsif (($EVENT eq "absent" && Value("Alarm") eq "inaktiv") && ($GTAG1 eq "absent" && $GTAG2 eq "absent")) {
fhem("set Alarm aktiv; set teleBot send ALARMIERUNG AKTIV: $ALIASNAME hat das Haus verlassen."); # Telegram
# fhem("set Alarm aktiv; set Infopush msg 'ALARMIERUNG AKTIV' '$ALIASNAME hat das Haus verlassen.' '' 0 ''"); # Pushover
}
}


Viel Spaß damit
Marco
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

skydns

#13
Da bei mir die Version um den Batteriestatus abzurufen aus dem Wiki nicht funkioniert, schreibe ich noch die Variante die bei mir funktioniert:

Zunächst habe ich im Verzeichnis /opt/fhem/script/
Eine Datei mit dem Namen "battcheck" angelegt mit dem folgenden Inhalt:


#!/bin/bash

mac=$1;
device=$2;

echo $mac;
if [ -z "$mac" ]
  then
  echo "no mac given";
  exit;
fi

while ps aw | grep gatttool | grep $mac |  wc -l | grep -v "^0$";do echo "already running"; exit;done;

hex=$(sudo gatttool -b $mac --char-read --handle=0x001b | tr a-f A-F)

if [ "$hex" ]
  then
    hex=${hex:33:2}
    dec=$(echo "ibase=16; $hex" | bc)
    echo $dec

    if [ "$device" ]
      then
      echo "setreading $device battery $dec" | nc 127.0.0.1 7072
    fi
  else
    echo "kein Status empfangen";
fi


Diese Datei hat folgende owner/group muss daher hiermit angepasst werden:
sudo chown fhem:dialout /opt/fhem/script/battcheck

Die GTAGs benötigen noch das userReadings battery
Bsp.:
attr gtag_gruen userReadings battery

Um den Batteriestatus abzurufen habe ich dann folgendes at angelegt für jeden einzelnen GTAG und führe Sie im 30 Sekundenabstand nacheinander aus:
Bsp.:
define battcheck_gn at *03:05:00 {if (Value("gtag_gruen") eq "present") {system('sudo /opt/fhem/script/battcheck 00:00:00:00:00:00 gtag_gruen &')}}

Funktioniert bei mir wunderbar.

Dazu habe ich dann noch eine readingsGroup angelegt, dazu fügt man am besten folgenden Code der fhem.cfg hinzu und führt danach ein "shutdown restart" in fhem aus.


### BATTERIECHECK
define Batterie readingsGroup .*:[Bb]attery\
.*:[Bb]attery[Ll]evel
attr Batterie notime 1
attr Batterie room Alarm
attr Batterie valueFormat {\
return "0" if( $VALUE eq "low" );;\
return "100" if( $VALUE eq "ok" );;\
return "0" if( $VALUE < 20 );;\
return "25" if( $VALUE < 35 );;\
return "50" if( $VALUE < 60 );;\
return "75" if( $VALUE < 85 );;\
return "100"\
}
attr Batterie valueIcon {\
'battery.ok' => 'measure_battery_100@green',\
'battery.low' => 'measure_battery_0@red',\
'battery.0' => 'measure_battery_0@red',\
'battery.25' => 'measure_battery_25@red',\
'battery.50' => 'measure_battery_50@orange',\
'battery.75' => 'measure_battery_75@green',\
'battery.100' => 'measure_battery_100@green'\
}


Gruß Marco
NUC - CUL868Mhz V3 culfwV1.67 - Zigbee2MQTT Sonoff 2.0 - Ubuntu 22.04 - FHEM 6.1 zum Schalten von Licht+Steckdosen (Sonoff,Shelly,MQTT,Tasmota) und Überwachung von diversen Homematic/Homematic IP Kontakten/Sensoren mit Anwesenheitserkennung

Mumpitz

ich wollte deine Lösung ebenfalls für meine G-Tags einsetzen. Leider bekomme ich folgende Einträge im Logfile, wenn ich das at ausführe:

no value received
connect: Connection refused (111)
7C:2F:80:AA:5F:8C
2017.01.30 19:53:00 3: battcheck_gtag_reto: -1


hat jemand eine Idee woran das das liegt?