NEWS
Anwesenheitscontrol basierend auf TR64 Adapter - Script
-
Hi,
ich habe ein kleines Programm geschrieben, dass die Anwesenheit aufgrund des TR64 adapters auswertet.
Voraussetzung ist, dass der Adapter TR64 installiert ist und natürlich eine Fritzbox vorhanden ist.
Die Anwesenheiten werden sehr zuverlässig gemessen mit IOS oder Android oder was auch immer. Natürlich dürfen die Telefone sich nicht vom WLAN abmelden was sowohl bei IOS nicht mehr passiert und auch nicht bei Android (es sei denn, dass sie so eingestellt sind)
Meine Erfahrung ist, dass es 10 Minuten dauert bis eine Abwesenheit festgestellt wird und ca. 1 Minute bis die Anwesenheit festgestellt ist.
Folgende Funktionen sind realisiert:
-
Anwesenheitsdarstellung im Bereich javascript ( ist aber quasi nur eine Dopplung vom TR64)
-
Anwesenheitsermittlung (ist irgendwer im Hause)
-
Liste der anwesenden Personen
-
Kommt Geht pro person
-
JSON Liste der Anwesenheiten mit den letzten Kommt/Geht Zeiten
-
auf Wunsch wird ein LOG geführt, dass die Geht/Kommt Zeiten historisch mitschreibt.
-
Anbindung der Anwesenheitssimulation. Wenn gewünscht wird die Anwesenheitssimulation eingeschaltet. Die Anwesenheitssimulation gibt es hier:
http://forum.iobroker.net/viewtopic.php … simulation
- 6 User sind einstellbar. Falls gewünscht können weitere User hinzugefügt werden (mit kleiner Programmerweiterung) - reduzierbar auf 6 user im Einstellbereich des Programmes
vG Looxer
Anwesenheitsliste als Json
Programm:
-
-
Hi, funktioniert ziemlich gut.
Bekomme immer die Meldung "eval can be harmful" zwar nur eine Warnung aber hmmm
Kannst du mir vielleicht auch einmal diesen Code erklären? Bzw was macht der?
on({id: User1, valNe: 0 }, function(obj) { if (obj.state.ack) { anwesenheit(User1Text,1); } });
Versuche gerade zu verstehen wie das Script triggert.
-
Bekomme immer die Meldung "eval can be harmful" zwar nur eine Warnung aber hmmm `
das ist ok. Ist eher ein Hinweis als Warnung.
on({id: User1, valNe: 0 }, function(obj) { if (obj.state.ack) { anwesenheit(User1Text,1); } });
Wenn TR64 das User Device auf true oder false setzt und auch die Bestätigung der Aenderung (stat.ack) erfolgt ist dann wird die Funktion "Anwesenheit" mit den Parametern User1Text(das ist der auslösende User) und "1" (das ist der erste User) aufgerufen.
vG Looxer
-
Okay danke
Schaue gerade was ich damit feines anstellen kann.
Den Status javascript.0.Anwesenheitssteuerung.Userlist.JemandDa müsste ich doch auch irgendwie in anderen Skripten abfragen können oder? Hab es mal versucht auch mit dem on dingens aber das wollte leider nicht
on({id: "javascript.0.Anwesenheitssteuerung.Userlist.JemandDa", valNe: 0 }, function(obj) { if (obj.state.ack) { setState("javascript.0.textProcessor", 'Wilkommen zu Hause', true); }}); // ende on
-
lass mal das ack weg. Das macht nur Sinn, wenn Bestätigungen erwartet werden.
Dies ist aber bei Javascript objekten nicht der Fall
-
Ist halt doch etwas anderes als c# Danke werde ich mal testen.
-
Sehr schön,
eine Frage, wie kann ich diese Tabelle mit Kommt/Geht darstellen?
-
Hi,
mit dem widget "basic table" und der object id der JSON Tabelle das vom Programm erzeugt wird.
vG Looxer
-
Hi,
mit dem widget "basic table" und der object id der JSON Tabelle das vom Programm erzeugt wird.
vG Looxer `
Danke für die schnelle Antwort.
Und Guten Rutsch in 2018
-
Hallo
Kann ich statt dem TR-064 Adapter auch einfach den radar Adapter verwenden?
Ich habe mal folgendes versucht:
! var User1 = setState ("radar.0.XXX.here");
! var User2 = setState ("radar.0.XXX.btHere");
! var User3 = setState ("radar.0.XXX.btHere");und hier weiß ich nicht was ich eintragen soll:
! // Hier ist der State für den die Deviceermittlung der durch den TR064 ermittelt wird
! //var StateTR064Device = "tr-064.0.devices.";und wie bekomme ich das dann in das Heizungsskript?
Ich weiß viele Fragen, ich habs nicht so mit dem Programmieren mehr so copy paste und dann ausprobieren.
So wie es aussieht hab ich es doch hinbekommen mit try and Error
Nachdem ich beimRadar Adapter kein state gefunden habe habe ich mir für die :
var User__n__ = StateTR064Device + "Trick"; einfach var Uwe = "radar.0.Uwe.here";
reingeschrieben.
dann kam immer ein Fehler
! createState(StateUserListeJason, CreationTime,{read: true, write: true, type: 'string', name: 'Anwesenheitsstatus Jason Liste', desc: 'UserListe als Jason'});
den habe ich dann auskommentiert
und den nächsten Fehler auch
! setState(StateUserListeJason, JasonString);
dann im Heizungsskript verlinkt und
es funktioniert. JuHu
Danke
-
dann im Heizungsskript verlinkt und
es funktioniert. JuHu `
aaaah, du hast es also hinbekommen - sehr gut.Ich habe auch eine Portierung für UNIFI vorgenommen. Das war schon etwas aufwendiger.
vG Looxer
-
Hi, wie bekomme ich die Tabelle so schön zusammen geschrumpft, bzw. wie kann ich die Felderbreite an die Namen anpassen? -
Hallo,
dieses script arbeitet zu meiner vollsten zufriedenheit, jedoch die tabelle macht mir sorgen.
name und status überdecken sich, und die zeiten werden leider nicht eingetragen. kann man das irgendwo einstellen?
gruß jörg
-
Bei mir updated er nicht mehr, obwohl im TR64 sofort erkannt wird wer eingeloggt ist und wer nicht.
-
Bei mir updated er nicht mehr, obwohl im TR64 sofort erkannt wird wer eingeloggt ist und wer nicht. `
Hi,Erste Frage wäre ob die Trigger ausgelöst werden.
Definition ist hier:
var StateTR064Device = "tr-064.0.devices."; // Hier ist der State für den die Anwesenheitssimulation. Bei True wird die AWS (separates Programm) gestartet var IDAWSAktiv = "javascript.0.Anwesenheitssteuerung.AWSAktiv"; // ID AWS flag // Falls die Anwesenheitssimulation verknüpft werden soll dann hier TRUE eintragen und dann die Zeit in Sekunden nach Abwesenheit, die vergehen soll bis die Simulation aktiviert wird var AWSCheckAktiv = false; // auf true setzen, wenn die Anwesenheitssimulation genutzt wird var AWSZeit = 600; // nach diesen Sekunden verzoegerung wird die Simulation aktiviert // die Variable anzahluser muss mit den folgenden variablen zusammenpassen: user1-userN, User1Text - userNtext, StateUser1 - StateUserN // vorgegeben ist 6, wenn mehr verwendet werden sollen, dann muss das coding leicht angepasst werden var anzahluser = 5; // Maximale Anzahl der User mit Anwesenheitsueberwachung // die Deviceliste aus TR064, die ueberwacht werden soll muss hier eingetragen werden var User1 = StateTR064Device + "Iphone-Daisy"; var User2 = StateTR064Device + "Micky-iPhone"; var User3 = StateTR064Device + "Tick"; var User4 = StateTR064Device + "Trick"; var User5 = StateTR064Device + "Track-Phone"; var User6 = StateTR064Device + "initial";
Bekommst du diesen Logeintrag im Log angezeigt, wenn sich die Anwesenheit ändert ?
log ("Ausloeser: " + Ausloeser,"info");
Wenn nein, dann stimmt was mit dem Trigger nicht.
wie oben aus dem Code zu sehen ist ist der Datenpunkt dazu
tr-064.0.devices. <name>in diesem Fall bitte genau überprüfen. Sag mal Bescheid.
vG Looxer</name>
-
Danke für die schnelle Hilfe, auch hier war der Datenpunkt falsch übernommen. Jetzt funktioniert es!
-
Guten Abend,
ich habe das Script mal ein wenig optimiert,entschlankt, so angepasst dass unlimitiert Anwesenheitssätze eingebaut werden können (das Array in Zeile 29 muss einfach erweitert werden) und eine HTML String Liste für das Material Design eingebaut.
1534_anwesenheitscontrol.txt -
Guten Abend,
ich habe das Script mal ein wenig optimiert,entschlankt, so angepasst dass unlimitiert Anwesenheitssätze eingebaut werden können (das Array in Zeile 29 muss einfach erweitert werden) und eine HTML String Liste für das Material Design eingebaut. `
Morgen,
Script läuft sehr gut einzige was mir aufgefallen ist das die Anwesenheit Userliste auf Niemand sich nicht verändert, bleibt auf Niemand stehen.
-
Ups, ein kleines ! vergessen :shock:
Habe mein Script oben aktualisiert.
-
Ups, ein kleines ! vergessen :shock:
Habe mein Script oben aktualisiert. `
Funktioniert.