***gelöst*** fhem Auslagerung von Dummy-Werten Zugang Web/MAC für Anwesenheit

Begonnen von Andy_C, 10 Juni 2020, 14:11:52

Vorheriges Thema - Nächstes Thema

Andy_C

Hallo Zusammen,

ich versuche gerade über FTUI einen Bereich für die Nutzereinstellungen zu machen. Heizung, Jalousien und auch die Zugangsdaten zum Senden über Mail ect. hat ganz gut geklappt. Ich habe eine Anwesenheitserkennung für 4 Personen über die Bluetooth-MAC und würde die ganz gerne in einen Dummy schreiben und dann auswerten lassen:

define Pr_Handy1 PRESENCE local-bluetooth 00:00:00:00:00:00 60 120

Die MAC würde ich gerne nicht direkt hier einschreiben, sondern in einen Dummy, Wie könnte ich das lösen?


Ausserdem würde ich gerne die Benutzerdaten für FhemWeb in einen Dummy schreiben.

attr allowed_WEB basicAuth { "$user:$password" eq "User:Passwd" }


viele Grüße, Andy

Otto123

Hallo Andy,

die erste Idee geht so nicht. Einzig wenn Du PRESENCE mit einer eigene Funktion ausstattest. Oder wenn Du das define nicht normal in der config ablegst sondern wenn Du ein notify auf global:INITIALIZED machst und dort die Daten erstmal aus dem Dummy liest und dann das define mit dem Perl Befehl {fhem("define ...")} abschickst. Kann sein, dass mir manch einer für die Idee den 🕊 zeigt :)
Ich verstehe den Sinn nicht, die BT Adresse pflegt man einmalig in der PRESENCE Definition? Was ist daran besser/schlechter als der Umweg über einen Dummy?

Das mit den Benutzerdaten würde ich lassen. Da kannst Du auch basicauth weglassen. Oder klebst Du den Hausschlüssel mit Klebeband an die Haustür?...
Außerdem macht man das nicht mehr so, sondern mit dem set Befehl
set allowed_WEB basicAuth username passworddamit wird mW nur der HASH im attribute abgelegt.

Aber wenn es unbedingt für Dich Sinn ergibt: Auszug DOku
Zitatfalls er in {} eingeschlossen ist, ein Perl Ausdruck. Für Letzteres wird $user und $passwort gesetzt, und muss wahr zurückliefern, falls Benutzername und Passwort korrekt sind.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Andy_C

Hallo Otto,

vielen Danke für Deine Nachricht und die Infos. *Lach*, ich würde sagen, das ich auf die Fragen mit dem Sinn fast schon gewartet habe. Bei mir ändert sich zum Einen öfter das Handy (für Unsereins bleibt es gleich wo wir die Daten eingeben) und andererseits kennt sich außer mir Niemand bei uns damit aus. Meiner Schwester könnte ich das wenn es über FTui läuft erklären und dafür gibt es leider persönliche Gründe (Wenn ich mal nicht mehr so kann fliegt Alles raus oder ich mache es so einfach das es auch ein Nicht-Fhemler bedienen kann).

Werde mir Deine Tips gleich mal anschauen... Internet ist weitgehend abgesichert, so das sich erst mal Jemand in mein VPN oder mein WLAN kommen muss. Ausser dem VPN und 80 für von intern geöffnete Sessions ist nichts offen. Auch da gibts immer Leute, die einen Weg finden... aber so einfach würde es wohl nicht ;-). In erster Linie geht es mir hier um die Bedienbarkeit für Laien, aber die Sicherheit werde ich natürlich nicht ausser acht lassen.

vielen Dank noch einmal für die Tips, ich werde es mir gleich anschauen, Gruß Andy

viele Grüße, Andy


Otto123

Wenn Du meinst, dass Du mit dem Dummy eine Art Bedienoberfläche hinbekommst (FTUI hab ich null Ahnung)dann mach irgendwas mit einem notify oder readingsproxy (ich glaub der kann sowas) wo Du nach Änderung der BT Adresse sowas ausführst.
Symbolischer Code.
defmod Pr_Handy1 PRESENCE local-bluetooth <Wert aus Dummy> 60 120
Umsetzung geht z.B. so
{fhem("define Pr_Handy1 PRESENCE local-bluetooth ".ReadingsVal('Dummy','state','00:00:00:00:00:00')." 60 120")}

Und für Benutzername Passwort nimm einen gelben Zettel ;) - oder lass allowed weg

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Andy_C

Hallo Otto,

defmod funtioniert nur mit der richtigen Adresse... mit dem dummy kommt er nicht zurecht...

Über das Notify von Dir will er immer die fhem.cfg speichern und setzt mir das define auf inaktiv bzw. setzt im Status ???... wenn ich es aktiviere funktioniert es... die MAC setzt er richtig.

Ich hatte schon ein wenig umständlicher, (Variable hätte ich wohl zu Fleiß gemacht) ;-) mit tmpdefine bzw. $defs (als temporäres Device) getestet, um das speichern zu vermeiden...  aber da war das Gleiche wie mit Deinem Notify (MAC ok, aber inaktiv und trotzdem Speichersymbol in fhem):


define tmpdefine cmdalias tmpdefine .* AS define $EVENT;; { $defs{$EVTPART0}{TEMPORARY} = 1;;;; undef }
define Nf_Pr_Handy1 notify global:INITIALIZED {my $Du_Handy1 = Value("Du_Handy1");; fhem ("tmpdefine Pr_Handy1 PRESENCE local-bluetooth $Du_Handy1 10 15")}



Gruß, Andy

Otto123

Moin,

naja aber das war klar, Du änderst die config. Das musst Du speichern.
Es gibt in FHEM nur ein dynamisches define (von dem ich weiß) das sind temporäre at.

Die erste Zeile in meinem letzten Post war nur symbolischer Code, hätte ich wohl besser dazu schreiben sollen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

Bzgl. des BT-Anwesenheits-Problems:

du kannst bei PRESENCE auch eine Funktion angeben, die genutzt wird um die Anwesenheit zu prüfen...
...dort kannst du "dynamisch" die MAC (z.B. aus einem Dummy o.ä.) auslesen und nutzen...

In der Funktion dann eben mittels BT-Funktionen (kommt drauf an was sich bei Handys anbietet ;)  ) abfragen, ob anwesend oder nicht..

Ist nicht schön (und quasi fraglich warum dann überhaupt Presence und nicht einfach ein at ;)  ) wäre aber eine dynamische Möglichkeit OHNE das Fragezeichen...

Evtl. kannst du dich am Code von hping3 orientieren: https://forum.fhem.de/index.php/topic,76342.msg682218.html#msg682218
(ist halt nicht BT sondern ping/arp aber auch nur als "Prinzip" gedacht / wenn BT, dann eben ping und arp durch entsprechende BT-Funktionen ersetzen / lässt sich im Inet bestimmt was passendes finden ;)  )

Dann halt die MAC (und IP) nicht per Aufruf übergeben, sondern eben auch das innerhalb der Sub aus z.B. einem Dummy lesen (ReadingsVal oder AttrVal / je nachdem, ob das im Dummy als Reading steht [setzen z.B. mit setreading Dummyname ReadingName Wert] oder in einem [user]Attribut)...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Zitat von: Otto123 am 10 Juni 2020, 18:44:20
... die erste Idee geht so nicht. Einzig wenn Du PRESENCE mit einer eigene Funktion ausstattest.
...
War vielleicht zu unscheinbar ;) aber mein allererster Satz. Du hast völlig Recht es nochmal mit einem Beispiel zu unterlegen. Sonst diskutieren wir noch ewig über die Konfigurations Änderung. :)

Die aber im übrigen auch mit dem Dummy vorhanden ist. Nur nicht im roten Fragezeichen sondern im statefile. Das wird von selbst geschrieben wenn FHEM ordentlich beendet wird! Aber wenn man wesentliche Konfigurationsdaten und nicht einfach den letzten Temperaturwert dort ablegt - muß man sich auch darum kümmern. Nicht vergessen :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

MadMax-FHEM

Hi Otto,

hihi, hatte ich überlesen ;)

Evtl. ja auch der TE ;)

War ja "nur so dahingeschrieben" in einem Satz...

Mal sehen was draus wird...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Andy_C

Hallo Joachim,

Du schreibst da ja von at. Das scheint mir auf den ersten Blick eine einfache Lösung zu sein wenn man darüber bluetooth abfragen kann.... Meine Fhem- Installation ist schon uralt und ich versuche gerade mit dem verbliebenen Wissen das Ganze aktuell zu gestalten. Oft hat man das nicht so auf dem Schirm... Alexa z.B. ist ja inzwischen total einfach...  und presence hat bei auch immer einwandfrei funktioniert. Deshalb hatte ich das gar nicht in Frage gestellt ;-(... Für bessere Lösungen bin ich immer offen. Jetzt heissts wieder Infos sammeln ;-).

@Otto
Hoffe ich stell mich nicht zu sehr an ;-). Bin nur lange draussen und versuch grad wieder mein Glück.

Gruß, Andy


MadMax-FHEM

So alt kann dein fhem doch nicht sein, wenn alexa-fhem Connector läuft!?

Und auch der "Unterbau" nicht...
...außer das ist auch "alles alt"... ;)
(dann: schade um all die Neuerungen ;) )

Naja, ob du ein at oder PRESENCE nimmst ist fast egal...
...der Hauptaufwand liegt bei beidem darin die "Prüf-Funktion" zu "schreiben" ;)

Ob die dann per at zyklisch aufgerufen wird und entsprechende Readings setzt (das passiert bei PRESENCE halt "automatisch") oder zyklisch per PRESENCE ist dann "Geschmackssache" ;)

Schau dir mal das verlinkte Beispiel an, dann verstehst du was ich meine (so hoffe ich)... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Andy_C

Hallo Joachim,

auf den Connector habe ich erst vor 1-2 Wochen umgestellt... Fhem sollte auch von meinem Account relativ einfach zu entkoppeln sein... Dachte erst ich müsste den Skill auf Amazon noch einmal basteln... dabei bin ich dann auf den Connector gestoßen und war überrascht das der nach ein paar Minuten lief ;-). Mein Fhem läuft seit irgendwann zwischen 2010- 2012.

Mit den Zugangsdaten hat geklappt... habe jeweils eine Perl-Variable erstellt und die Werte von den Dummys rein... die Variable befüllen dann $user:$passwort muss ich nur noch in Ftui integrieren.

Kann ich im Presence auch Variablen verwenden? Ich habe irgendwas gelesen das es nur z.b. bei at ect möglich ist? Wäre natürlich schön wenn ich die MAC einfach nur in eine Variable setzen müsste ;-o... Für das Beispiel (danke Dir) muss ich erst mal den Kopf freikriegen um mich da reinzudenken (hoffe auch das ich es verstehe). Da werde ich mich wohl morgen mal dransetzen.

viele Grüße, Andy


MadMax-FHEM

Hmmm, wo willst du denn bei PRESENCE Variablen verwenden!?
Im "define" hast du ja schon gemerkt: keine gute Idee ;)


Also es ist doch so (zumindest in dem Beispiel), dass du bei Presence (mit eigener "Prüffunktion") eben angibst welche Sub gerufen werden soll.

Liefert diese 0 ist absent und liefert diese 1 zurück, so ist present (oder so ähnlich)...

Da es die gewünschte Sub ja noch nicht fertig gibt (denke ich ;)  ), kannst du dort tun "was du willst" :)

Beispiel ("echter Code gemischt mit Pseudo-Code" ;)  ):


sub CheckPresence
{
  # wenn du einen Dummy "Mac-Dummy" hast, wo im Reading MAC die MAC-Adresse steht
  my $MAC = ReadingsVal("Mac-Dummy","MAC","");

  # wenn du einen Dummy "Mac-Dummy" hast, wo im (user)Attribut MAC die MAC-Adresse steht
  my $MAC = AttrVal("Mac-Dummy","MAC","");

return Check-Mac($MAC); # ;)
}


Du kannst auch dem Aufruf Parameter übergeben, z.B. den Dummy-Namen wo eben die jeweilige MAC für den entsprechenden Aufruf drin steht.
Dann hast du nur eine "CheckPresence" Sub für alle PRESENCE-Devices und du übergibst jeweils eben den entsprechenden Dummy...
Oder du hast einen "Sammeldummy" mit verschiedenen Readings und übergibst den Reading-Namen...

Wie du es dann machen willst hängt halt davon ab WAS GENAU du WIE bzw. WO haben willst...


Und: dann mal los und Perl lernen ;)

Der Teil "Check-Mac", den ich einfach so reingeschrieben hab ist halt dann der interessante Teil, also wie willst du die MAC etc. prüfen auf Anwesenheit... ;)

Im verlinkten Beispiel wird dann IN der Check-Sub, die von PRESENCE aufgerufen wird "sogar" auf "Systemebene" hinabgestiegen für die tatsächliche Prüfung...

Also erst einmal die teile zusammen sammeln, sich eine "Architektur" (bzw. zumindest gewünschten Ablauf etc.) überlegen und dann: los! :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Andy_C

Hallo Joachim,

danke für die Mühe mit dem Beispiel ;-). Ich würde den ersten Weg mit der Readingsval. Oben im Notify hatte ich schon mit Variablen getestet. Hier allerdings direkt im Notify und das hat auch funktioniert... nur wollte er halt immer speichern. Mit den Variablen über die myutils check ich nicht so recht wie und wann ich in fhem zugreifen kann. Ich hatte da schon unter dem Sub "myUtils_Initialize" als "our" definiert... denke Du hast recht... noch mehr lesen ;-)... Da fehlt mir noch das Verständnis bezüglich Variablen. Wenn ich es das erste Mal zum Laufen krieg wird es leichter zu verstehen.

Wenn es irgendwie geht würde ich am Liebsten das vorhandene Presence nur abändern, damit statt der fest eingetragene MAC über einen machbaren Weg der Wert eines Dummys (in dem die MAC steht) eingetragen wird.

viele Grüße, Andy

MadMax-FHEM

#14
Ja mal lesen im Wiki bzgl. myUtils!

Eigentlich ganz einfach (siehe verlinktes Beispiel):

Du gibt im PRESENCE-Device beim Anlegen eine Funktion/Sub an, die von eben diesem Modul zyklisch "gerufen" wird.

In dieser Funktion liest du eben aus deinem/deinen Dummy/Dummies die jeweilige MAC (oder was immer du brauchst um Anwesenheit zu prüfen) aus (ReadingsVal / AttrVal)

Wie du die MAC in den Dummy bekommst per UI weißt du ja offenbar/hoffentlich, weil das war ja der Grund für diese "Umstände" ;)

Wenn du dann in der Sub die MAC (oder was auch immer brauchst) hast, dann musst du damit IN dieser selben Sub eben Anwesenheit prüfen und entsprechend 0 oder 1 zurückgeben...

Die Anwesenheit: present/absent (und das zyklische Rufen etc.) übernimmt dann das PRESENCE-Device... :)

Du kannst/musst ja (wie bereits geschrieben) für jedes Handy (oder was auch immer) ein eigenes PRESENCE-Device anlegen und da kannst du ja als Parameter an die Funktion was übergeben, was der Sub "sagt" welche MAC (oder was auch immer) ausgelesen werden soll...

Allerdings, wenn du noch so am Anfang stehst ist es fraglich, ob du gleich so komplizierte Dinge umsetzen solltest ;)


EDIT: evtl. laut Wiki/basierend auf Template eine myUtils anlegen und dort dann einfach eine einfache Sub, die evtl. erst mal nur mittels ReadingsVal etwas ausliest und einfach per return zurück gibt. Aufrufen kannst du sie ja zum Test in FhemWeb-cmd wie folgt: { meineSub() }  (geschweifte Klammer -> wechsel nach Perl, dann Aufruf der Sub und dann Klammer zu / mehr über Klammern gibt's auch ein Wiki zu ;) )... Wenn du sie so testest, dann sollte auf der Weboberfläche von fhem der Wert des per ReadingsVal ausgelesenen Wertes stehen, simpel aber du lernst... ;)


Also wenn du weißt wie du die Anwesenheit prüfen kannst (also im "simplen Beispiel" CheckMac ;) ) und deine Dummy für die einfach MAC-Eingabe hast, dann kannst du die Sachen hier posten und wir kriegen das dann schon leicht hin...

Was ich halt nicht weiß (daher nicht helfen kann): wie willst du Anwesenheit prüfen (also welcher Mechanismus)
Und: wie sieht/sehen dein/deine MAC-Dummy aus ;)

Viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)