Hallo allerseits,
nachdem ich nun vieles über HA über Simons YT-Kanal gelernt und umgesetzt habe (danke für die tollen Tutorials), stehe ich nun vor einem Problem, bei dem ich nicht wirklich weiterkomme: Mein Sohn hat nun einen eigenen PC bekommen und nutzt diesen nun wie erwartet neben seinem Handy sehr intensiv. Wir überwachen das bisher so, dass wir oft auf die Uhr gucken und mal in seinem Zimmer vorbeischauen, aber das funktioniert nur bedingt gut. Kinder können auch sehr früh aufstehen, wenn sie heimlich zocken möchten… Daher hatte ich überlegt, mir über HA eine Automatisierung zu erschaffen, die quasi die Zeiten loggt, in denen er sich angemeldet hat. Ich möchte da nichts ausspionieren, sondern lediglich die Anmelde- und Abmeldezeiten tracken. Soweit, so gut. Als ersten habe ich es über die Fritzbox-Tools versucht. Aber da die Kiste am LAN hängt, wird die länger als angeschaltet betrachtet als es tatsächlich der Fall ist. Hilft also nicht. Als nächstes bin ich auf den HASS-Agent gestoßen. Der trackt zwar schön alles, aber hier gibt es das Problem, dass das beim Herunterfahren des PCs stets die Meldung kommt, dass ein anderen User noch angemeldet sei. Das ist nervig und auch irgendwie nicht sehr vertrauenserweckend. Außerdem kann der HASS-Agent mir zu viel für meine Bedürfnisse. Jetzt würde mich interessieren, wie ihr das Problem lösen würdet, habt ihr da Ideen? Am liebsten hätte ich einfach nur einen einfachen Service, der beim Anmelden unter Win eine Zeit notiert und das Ganze ebenfalls macht, wenn der PC beendet wird. und diese Daten an HA weitergibt. Eigentlich nichts Wildes… Ich komme aber nicht weiter. Daher würde ich mich sehr über Hilfe freuen. Danke!
Vielleicht eine smarte Steckdose, wo man den Stromverbrauch tracken kann und dann hierüber einen Helfer ein/aus schalten kann…
Zeigt die fritzbox nicht auch an wenn der PC online ist?
Dann könnte man online/offline tracken.
Mir fällt da auch nichts anderes ein, was unabhängig vom System funktioniert. Nur wenn der Sohn einmal auf den Trichter gekommen ist, dass mit der Steckdose seine PC-Zeit erfasst wird, kann er diese einfach ausstecken. Für diesen Fall wäre ein Strommesser hinter der Steckdose, wie bspw. Shelly PM Mini Gen3 oder Shelly Plus 1PM geeignet. Der Einbau ist aber nicht so einfach wie mit einer einfachen Steckdose.
Das wäre auch meine Idee, das übers Netzwerk zu machen, Fritzbox müsste das eigentlich anzeigen, aber ich weiss nicht ob die HA-Integration für die Fritzbox die Infos liefert ( bei mir ist die Fritzbox reines Modem und Telefonanlage )
Hi Leute, danke für die Rückmeldungen soweit.
Also das mit der Fritzbox war auch mein erster Versuch, aber da es sich hierbei um eine LAN-Verbindung handelt, ist der PC nicht einfach aus dem Netzwerk verschwunden, wenn er normal „ausgeschaltet“ ist. Mit dem Netzstecker wäre dem so, aber im Normalzustand ist der PC eigentlich immer aktiv.
Eine weitere Methode ist die REST API von HA zu benutzen. Dazu schreibt man sich ein Script und ruft dieses beim Anmelden und Abmelden auf. Wenn man Anmeldung und Abmeldung separat erfassen möchte, benötigt man zwei Scripte und evtl. auch zwei Entitäten.
Ich habe dazu einen Helfer Text erstellt und konnte die Zeit in diesen mittels folgendem Script hineinschreiben:
#! /bin/bash
curr_date=`date +%m/%d/%Y`
curr_time=`date +%T`
loginzeit="$curr_date um $curr_time Uhr"
echo $loginzeit
curl -X POST \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d "{ \
\"state\": \"$loginzeit\" \
}" \
http://URL/api/states/ENTITÄTS_ID
Die großgeschriebenen Wörter müssen durch die eigenen Namen ersetzt werden. Die Ausgabe sieht dann wie folgt aus: 08/08/2024 um 14:01:16 Uhr
Es gibt zwar auch den Helfer Datum/Uhrzeit, habe mich aber mit dem nicht genau befasst was er für einen Input erwartet. Text ist da flexibler.
Das Script funktioniert unter Linux. Wie es unter Windows ausschaut, weiß ich gerade nicht. Werde ich aber später mal testen können. So bewandert bin ich mit dem Betriebssystem aus Redmond nicht, dass ich das sofort sagen könnte. Aber das zumindest mal als Ansatz.
Ich nutze Family Safety von Microsoft. Hat aber nichts mit HA zu tun.
Ich kann nur einen Teil-Erfolg verbuchen, da ich nur Windows Home habe. Um Scripts auch beim Abmelden auszuführen ist jedoch mindestens Windows Pro notwendig. Man kann jedoch mittels einem Workaround* sich behelfen, in dem ein Script nach der Anmeldung solange erneut aufgerufen wird, wie der Computer eingeschaltet/Benutzer angemeldet ist. Es sei denn, man hat Windows Pro
@echo off
rem Variablen definieren
set "URL=DEINE_URL"
set "TOKEN=DEIN TOKEN"
set "ENTITY_ID=DEINE_ENTITAETS_ID"
rem Aktuelles Datum und Uhrzeit abrufen
for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value') do set datetime=%%I
set year=%datetime:~0,4%
set month=%datetime:~4,2%
set day=%datetime:~6,2%
set hour=%datetime:~8,2%
set minute=%datetime:~10,2%
set second=%datetime:~12,2%
set curr_date=%month%/%day%/%year%
set curr_time=%hour%:%minute%:%second%
set loginzeit=%curr_date% um %curr_time% Uhr
rem Daten mit curl senden
curl -X POST -H "Authorization: Bearer %TOKEN%" -H "Content-Type: application/json" -d "{ \"state\": \"%loginzeit%\" }" "%URL%/api/states/%ENTITY_ID%"
Ein Dank geht an https://medium.com/@viktor.mukha/push-notifications-from-bash-script-via-home-assistant-852fa92f60ab und ChatGPT
Anleitung
1. Schritt
Erstelle in HA zwei Helfer Text. Einen für den login, einen für den logout. Notiere die Entitäts-ID.
2. Schritt
Erstelle einen Token unter Profil → Sicherheit (ganz unten) und gebe diesem einen Namen. Bevor du das Fenster schließt, kopiere den Token.
3. Schritt
Speicher das Script als .bat ab. Auch hier einmal für den login, einmal für den logout. Vor dem Speichern ersetzt du DEINE_URL, DEIN TOKEN, und DEINE_ENTITAETS_ID mit deinen Daten. Als Speicherort wählst du am Besten einen Ort, der nicht so offensichtlich ist. Ich habe es unter C:\Windows\System32\GroupPolicy\User\Scripts\Logon
abgespeichert, weil dies im Internet so las. Gebracht hat es jedoch nichts. Kann aber dennoch ein guter Ort sein. Den kann man auch nur mit Admin-Rechten bearbeiten.
3. Schritt
Öfne die Aufgabenplanung. Hier habe ich zwei Aufgaben vorbereitet:
Login
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2024-08-08T22:11:41.2951207</Date>
<Author>GUNTER</Author>
<URI>\HA_LOGIN</URI>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
<UserId>Gunter</UserId>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-1777102419-1080260835-3713813881-1002</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
<RestartOnFailure>
<Interval>PT1M</Interval>
<Count>3</Count>
</RestartOnFailure>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\GroupPolicy\User\Scripts\Logon\ha_rest.bat</Command>
</Exec>
</Actions>
</Task>
Logout
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2024-08-08T22:13:19.0327757</Date>
<Author>GUNTER</Author>
<URI>\HA_LOGOUT</URI>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Repetition>
<Interval>PT5M</Interval>
<StopAtDurationEnd>false</StopAtDurationEnd>
</Repetition>
<Enabled>true</Enabled>
<UserId>GUNTER</UserId>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-1777102419-1080260835-3713813881-1002</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
<RestartOnFailure>
<Interval>PT1M</Interval>
<Count>3</Count>
</RestartOnFailure>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\GroupPolicy\User\Scripts\Logoff\ha_rest_logout.bat</Command>
</Exec>
</Actions>
</Task>
Die Logout-Aufgabe ist so konfiguriert, dass sie alle 5 Minuten (Minimale Möglichkeit) wiederholt wird. Somit wird die Zeit für den Logout alle 5 Minuten erneuert, solange der Sohn am Computer ist.
Du kannst diese in der rechten Seitenleiste mittels Aufgabe importieren importieren. Unter Trigger muss noch der richtige Benutzer eingepflegt werden. Dazu den Trigger öffnen. In dem sich öffnenden Fenster auf Benutzer ändern klicken und den Kontonamen deines Sohnes in das weiße Textfeld eingeben. Nun noch auf Namen überprüfen und OK.
Unter dem Reiter Aktionen musst du noch den Speicherort des Scripts festhalten. Danach ist die Aufgabe fertig, sofern du nicht noch weiteres ändern möchtest.
Ich hoffe, ich konnte dir helfen. Sollte das der Weg sein und du dazu weitere Fragen hast, melde dich gerne. Hoffe auch, nichts vergessen zu haben
*Nachtrag: Der unschöne Nebeneffekt beim wiederholten Aufrufen des Scripts ist, dass dann auch ganz kurz das Terminal geöffnet wird. Bei Videos im Vollbild kann es dazu kommen, dass dann die Taskleiste eingeblendet wird und bleibt, bis man aufs Video klickt. Denn das Terminal wird nicht im Hintergrund ausgeführt und holt sich in den Vordergrund. Bei Spielen könnte es ein ähnliches Verhalten geben und auf Dauer nerven. Auch sieht man das Terminal-Fenster für eine kurze Sekunde.
Wow, ich danke dir schon einmal vielmals! Ich werde es am Wochenende einmal ausprobieren und anschließend berichten! Ich habe auf dem Rechner des Sohnes sogar Win11 Pro drauf, ich wusste, dass sich das irgendwann lohnen wird!
Zu MS-Family Safety: das funktioniert leider nicht zuverlässig. Zum einen werden nicht alle Zeiten wirklich gespeichert, es gibt bei uns immer Lücken, und zum anderen sind die Zeiten erst am Folgetag ersichtlich. Keine Ahnung wieso und überhaupt, Microsoft eben.
Anyway, danke erstmal für euren Input, ich melde mich dann nochmal.
So, mit ein bisschen Verspätung melde ich mich zurück.
Also leider ist es mir nicht gelungen, die obige Lösung mit dem automatischen Script umzusetzen, bzw. es hatte nicht so gut funktioniert.
Aber ich bin dadurch auf eine andere Lösung gestoßen, die im Prinzip wie folgt funktioniert:
Über die PING-Instanz wird alle 60s geschaut, ob der PC reagiert. Entgegen dem Fritzbox-Konzept funktioniert das zuverlässig. Anschließend kann ich diesen Zustand über Helfer abfragen und auswerten.
Ich bin noch dabei, es grundsätzlich aufzubauen, aber die Grundfunktion ist gegeben:
Wird der PC angeschaltet, bekomme ich eine Telegram-Nachricht. Beim Ausschalten ebenfalls, mit der angezeigten Dauer (Laufzeit).
Ich arbeite das noch schön weiter aus in den nächsten Wochen und stell es dann hier online, wenn es getestet ist und zuverlässig funktioniert.
Schönes Wochenende euch allen!