Mobile Daten - Zähler monatlich zurücksetzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Mobile Daten - Zähler monatlich zurücksetzen

    Hiho werte Gemeinde, nu tüddel ich schon seit letztem Mai mit meinem Jolla (one) herum (muss eines der letzten gewesen sein) und habe soweit auch alles fein. Nur ein kleines aber. ABER: ich würde gerne den Zähler für die mobilen Daten (Datenzähler) gerne automatisch jeden Monat auf null setzen.
    Leider finde ich dazu keine Option in den Einstellungen, keinen Patch bei openrepro, keine Infos in Foren und habe keine Idee wie der Befehl aussehen würde, wollte ich das als cron-job einrichten. Mit letzterem hätte ich keine Probleme (fänd ich sogar mit die geilste Methode, weil kiss), aber dazu müsste ich wissen, wie man den Datenzähler per CLI steuert.
    So bitte erhellt mich: hab ich was übersehen? Wo habe ich die Tomaten auf den Augen oder wer weiß was?
    Vielen Dank entrichte ich schoneinmal im Voraus. ;)
    Die Kraft des Argumentativen wird meist erheblich überschätzt.
  • Hi Kamikatze

    schön wieder von dir zu lesen :)

    Der integrierte Datenzähler des Jolla scheint übrigens nicht so richtig zuverlässig zu funktionieren.
    Ich habe hier etwas für dich gefunden, dass durchaus interessant scheint und ausbaubar ist:

    together.jolla.com/question/51…o-poor-mans-data-counter/

    Das Script kann nachbearbeitet werden, dass es nur den aktuellen Verbrauch misst und nicht seit dem letzten Systemstart.
    Außerdem kannst du vielleicht sogar eine Benachrichtigung per Mail oder so einrichten, wenn bestimmte Quota erreicht sind et cetera.

    Lieben Gruß - med
    IT Security Engineer
    Fachinformatiker / Systemintegrator | GNU / Linux Admin

    Info Bytesund.biz
    Suchst du? Hier findest du!
    Hier deinen Code pasten ...


    Die Sprache der Menschen ist einzigartig aber nicht eindeutig.
    Das Verständnis des Gesagten hängt vom Wohlwollen des Gegenüber ab.
  • Hi MedProfiler,

    danke für deine Antwort. Über das script bin ich auch schon gestolpert, macht mir aber schon zuviel. :) Der baut sich ja quasi seinen eigenen Datenzähler. Jedenfalls war ich dort auf die Files für die Zähler unter /sys/class/net/$INTERF/statistics gestoßen, doch beim bearbeiten der files hatte ich einige Probleme: auch root darf nur lesend darauf zugreifen. Okay, mit chmod 664 fix geändert, aber dann folgt der Fehler "Write error Input/Output error". Damit konnte ich erstmal nix anfangen. Ich befürchte, das es für den "richtigen" Datenzähler noch eine Lock-Datei gibt, oä was Änderungen an den Files verhindert.

    Was mich auch verwundert: keine der Zähler stimmt mit den Werten überein, die mir unter "Mobile Daten" angezeigt werden*. Nachdem ich den Datenzähler wieder zurück auf null gesetzt habe blieben auch die Werte unter rx-bytes und tx_bytes unverändert, bzw. zählten einfach weiter hoch. Das sie überhaupt hochzählen deutet aber doch irgendwie darauf hin, das sie etwas damit zu tun haben müssen. Momentan ist mir das etwas rätselhaft.


    *Mobile Daten: Empfangen: 264,0 MB, gleichzeitig in der rx_bytes: 15831101
    Die Kraft des Argumentativen wird meist erheblich überschätzt.
  • Guten Morgen @Kamikatze,
    das /sys Verzeichnis ist leider nur ein "virtuelles Dateisystem", das Daten von Anwendungen oder Kernel zum auslesen bereitstellt. Änderungen darin funktionieren oft nicht oder haben keinen Einfluss auf das System.

    Ich habe eben mal mit dem dbus-monitor geschaut, was passiert, wenn ich meine Daten resette und bin dann auf folgendes gestoßen:

    /var/lib/connman/cellular_$MAC-ADRESSE_context1/stats.home (sowie status.roaming)
    leider sind die Daten darin binär und ich habe keine Ahnung, was die mir sagen wollen. - Nach einem Reset, waren die Dateien aber komplett leer.

    Daher einfach mein Versuch:
    WLAN aus, nochmal ein paar Kilobytes für die Statistik sammeln und ein:
    echo "" > /var/lib/connman/cellular_$MAC-ADRESSE_context1/stats.home abfeuern.
    Zuvor hatte ich in der QML-Datei der Jolla-Settings gelesen, dass der Netzwerk-Service neu geladen werden soll. Die scheinen es zwar etwas eleganter zu lösen, aber ich kann nur den Holzhammer bedienen:
    systemctl restart connman

    Die Daten stehen auf "0". Leider wird damit der Timestamp des letzten Resets nicht aktualisiert.

    Wie immer gilt:
    Ich bin ein Pfuscher. Wer es mir nachmacht, ist selbst verantwortlich.
    Außerdem habe ich das ganze nur 3 mal versucht und kann nicht versprechen, dass es keine negativen Auswirkungen auf das System hat.
    // Bodenseepirat
  • SonArc schrieb:

    /sys Verzeichnis ist leider nur ein "virtuelles Dateisystem"
    dash Aua. Ja. Danke für die Erinnerung. Spart mir weitere Zeit an den falschen Dateien zu schrauben.
    Das WE war etwas voll, mal schauen, das ich nächste Woche wieder etwas Zeit finde da weiter zu basteln. Am besten dann an den richtigen Dateien. :D


    Update / Edit:

    So, ein weiteres Schrittchen: du lagst genau richtig @SonArc, stats.home enthält den Transfer in Hexadezimal. Per Hexeditor konnte ich am Mac die Stellen identifizieren: Byte 32-35 sind die gesendeten Daten und Byte 24-27, die empfangenen Daten. Ein Rücksetzdatum enthält die Datei aber offenbar nicht. Auch der Zeitstempel der Datei passt nicht.
    Setze ich aber die Bytes in der Datei auf null und setze die Datei wieder auf meinem Jolla ein, ist der Zähler wieder auf null. Das geht also.
    Wie ich die Datei nun mit einem shell-script gezielt als Hexdatei (an den richtigen Stellen) manipuliere ist dann der nächste Schritt. Wer Tipss hat: immer her damit. ;)
    Die Kraft des Argumentativen wird meist erheblich überschätzt.
  • Hmm, wenn du vi installiert hast könnte man hier vielleicht die Möglichkeit des Editors nutzen, Dateien auch im Binärformat zu öffnen. (vi -b datei/name)

    Vielleicht hilft dir das weiter: cucm.de/blog/102/mit_vi_binaer…tor_unter_linux_benutzen/

    Würde mich freuen, wenn du erfolgreich bist.

    Lieben Gruß - med
    IT Security Engineer
    Fachinformatiker / Systemintegrator | GNU / Linux Admin

    Info Bytesund.biz
    Suchst du? Hier findest du!
    Hier deinen Code pasten ...


    Die Sprache der Menschen ist einzigartig aber nicht eindeutig.
    Das Verständnis des Gesagten hängt vom Wohlwollen des Gegenüber ab.
  • Hallo zusammen,
    es passt, wenn man die Datei einfach leer räumt.
    Wie erwähnt, macht der Reset aus den Settings auch nichts anderes als das File komplett leer zu machen, (wo auch immer, den Timestamp) setzen und den Netzwerk Service neu laden.

    Gescriptet passt das schon so, wie erwähnt:

    Shell-Script

    1. echo "" > /var/lib/connman/cellular_$MAC-ADRESSE_context1/stats.home
    2. systemctl restart connman

    eben bis auf die Einschränkung, dass ich noch nicht weiß, wie man den Timestamp setzen könnte.
    // Bodenseepirat
  • Kamikatze schrieb:

    Mobile Daten muss derweil ausgeschaltet sein.
    Danke für den Hinweis.
    Da ich mich bis heute noch nicht mit Touchscreentastaturen in jeder Form anfreunden konnte, hatte ich jedesmal mein WLAN für eine SSH Sitzung geöffnet.

    In dem Fall könnte es klappen, wenn man den Connman zuerst beendet, Daten löscht und wieder startet:


    Quellcode

    1. systemctl stop connman
    2. echo "" > /var/lib/connman/cellular_$MAC-ADRESSE_context1/stats.home
    3. systemctl start connman
    Dadurch sollte auch die Mobile Verbindung kurz abgeschossen werden (was im besten Fall einmal im Monat passiert und für mich vertretbar wäre.

    Und ja, der Timestamp...
    Ich habe auch mal versucht, die passenden QML Befehle in eine eigenständige App zu kopieren und eben den Trigger mit dem Button zu überspringen.
    Da hat es zwar auch mit dem Timestamp geklappt, aber das war eine QML Anwendung (mit GUI), die sich (mit meinen C++ Kenntnissen) von mir nicht automatisch beenden lies.

    Ich werde nochmal schauen, ob ich über dbus-monitor --system noch was passendes finde, das ich interpretieren kann.

    Update:
    So, alles ganz einfach...
    Nun greifen wir eine grundlegende Datenbank an, daher nochmal der Hinweis: ...Pfuscher... ...Gefahr... Macht es nicht nach (falls doch, macht Backups)...

    Der Timestamp findet sich in der Datei: /home/nemo/.config/dconf/user

    Der neue Timestamp muss als User "nemo" mit folgendem Befehl geschrieben werden:
    dconf write /apps/jolla-settings/cellular_counter_reset_time/cellular_$MAC-ADRESSE_context1 "'`date +%Y-%m-%dT%H:%M:%S`'"


    Mit einem
    dconf read /apps/jolla-settings/cellular_counter_reset_time/cellular_$MAC-ADRESSE_context1 kann man zuvor schauen, welchen Schlüssel man bearbeitet.

    Zwischenzeitlich ist mir aufgefallen, dass die Variable keinesfalls die Mac-Adresse sein kann. Warum auch immer es mit den gleichen Files bei WiFi Verbindungen zu passen scheint.
    // Bodenseepirat
  • So, zusammengefasst und generalisiert könnte das Skript so aussehen:


    Shell-Script

    1. #!/bin/bash
    2. systemctl stop connman
    3. cellularId=`su nemo -c "dconf list /apps/jolla-settings/cellular_counter_reset_time/"`
    4. echo "" > /var/lib/connman/$cellularId/stats.home
    5. echo "" > /var/lib/connman/$cellularId/stats.roaming
    6. su nemo -c "dconf write /apps/jolla-settings/cellular_counter_reset_time/$cellularId \"'`date +%Y-%m-%dT%H:%M:%S`'\""
    7. systemctl start connman
    Getestet habe ich es als normales Skript (kein Cron) - Ggf. müssen im Cronjob noch die $PATH Variablen angegeben werden.

    Wichtig wäre noch, dass das Skript auch ausgeführt wird, wenn das Telefon zum angegebenen Zeitpunkt aus war (anacron? - Gibt es wohl leider nicht im Warehouse)
    // Bodenseepirat
  • Wow. geil! :thumbup:
    Ich hatte inzwischen festgestellt, das es ja gar keinen cron mehr gibt. Deshalb versuche ich gerade das ganze in systemd reinzutriggern und bastel gerade an dem .service-file.
    Ich schnapp mir mal die Teile deines Scriptes, die ich gefahrlos ausführen kann (also erstmal ohne den Timestamp) und versuche es damit, wenn das geht, teste ich das mit dem Timestamp nochmal und nehme es dann mit rein.
    Ich persönlich würde das "start connman" sogar rauslassen, da ich meine mobilen Daten nur bei bedarf einschalte.
    Die Kraft des Argumentativen wird meist erheblich überschätzt.
  • Der Connman ist auch für WLAN und Bluetooth zuständig. - Wenn der nach dem Skript nicht mehr hochkommt, wird es damit auch Probleme geben.
    Außerdem sollte es dann nicht mehr funktionieren, Datenverbindungen über die GUI zu starten.

    Aber nach dem Service-Start kommen nur die Verbindungen zu stande, die zuvor aktiv waren. - Wenn Deine mobilen Daten deaktiviert waren, wird es auch nach einem Restart so bleiben.

    Für Cron gibt es in den OpenRepos so einiges, das man mal genauer anschauen könnte.
    // Bodenseepirat
  • Begehrlichkeiten geweckt? ;)
    Die stats.home ist eine Hex-Datei, wie man das per Script parst ist mir noch zu hoch. Wie oben erwähnt sind die Bytes 24-27, die empfangenen Daten die Bytes 32-35 die gesendeten Daten. So stellte es sich mir zumindest in HExEditor am Mac dar (s. Screenie).
    HTH
    Dateien
    • stats.home.png

      (28,41 kB, 3 mal heruntergeladen, zuletzt: )
    Die Kraft des Argumentativen wird meist erheblich überschätzt.
  • Oookay, ich fange mal an:
    Ich habe mich nun etwas in den systemd eingearbeitet. Um einen monatlichen job zu ermöglichen brauchen wir zwei neue Dateien.
    /etc/systemd/system/monthly.service:

    Quellcode: monthly.service

    1. [Unit]
    2. Description=monthly scripts to reset mobile data
    3. [Service]
    4. ExecStart=/home/nemo/.config/mdreset.sh

    /etc/systemd/system/monthly.timer

    Quellcode: monthly.timer

    1. [Unit]
    2. Description=monthly script resetting mobile data
    3. [Timer]
    4. OnCalendar=monthly
    5. WakeSystem=true
    6. Persistent=true
    7. [Install]
    8. WantedBy=timers.target
    Dazu das Shell-Script von @SonArc, das ich unter /home/nemo/.conf/ abgelegt habe (da ist es "aus dem Weg") - die Zeile mit dem Timestamp habe ich (noch) auskommentiert.



    Shell-Script: mdreset.sh

    1. #!/bin/bash
    2. systemctl stop connman
    3. cellularId=`su nemo -c "dconf list /apps/jolla-settings/cellular_counter_reset_time/"`
    4. echo "" > /var/lib/connman/$cellularId/stats.home
    5. echo "" > /var/lib/connman/$cellularId/stats.roaming
    6. # su nemo -c "dconf write /apps/jolla-settings/cellular_counter_reset_time/$cellularId \"'`date +%Y-%m-%dT%H:%M:%S`'\""
    7. systemctl start connman
    Danach, Aktivierung und Start des Dienstes:

    [root@Sailfish ~]# systemctl daemon-reload
    [root@Sailfish ~]# systemctl enable monthly.timer
    [root@Sailfish ~]# systemctl start monthly.service (ich glaube das ist für die Katz' jedenfalls pennt er gleich wieder ein)
    [root@Sailfish ~]# systemctl start monthly.timer
    check:
    [root@Sailfish ~]# systemctl status monthly.timer

    Damit sollte dem gut sein. Ist es aber nicht.

    Das Script wird automatisch aufgerufen (ich teste momentan mit 'hourly' statt 'monthly' sonst dauert mir das zu lange).

    Quellcode

    1. Jan 24 16:00:00 Sailfish systemd[1]: Starting monthly scripts to reset mobile data...
    2. Jan 24 16:00:00 Sailfish systemd[1]: Started monthly scripts to reset mobile data.
    3. Jan 24 16:00:00 Sailfish systemd[1]: Stopped Connection service.
    4. Jan 24 16:00:00 Sailfish MDreset[25284]: /home/nemo/.config/MDreset: line 8: /var/lib/connman/$cellularId/stats.home: ambiguous redirect
    5. Jan 24 16:00:00 Sailfish MDreset[25284]: /home/nemo/.config/MDreset: line 9: /var/lib/connman/$cellularId/stats.roaming: ambiguous redirect
    Er meckert auch meine stats.roaming an, aber das ist kein Kunststück, die habe ich nicht. Da darf er meckern, entweder ich schmeiße die Zeile raus, oder ich lege die Datei mal an, damit das Script was zu tun hat.
    Bleibt der ambiguous redirect: kann jemand damit etwas anfangen?


    Die Daten werden zurückgesetzt, wenn ich das Script direkt anstoße, aber nicht, wenn systemd das macht. :hmmm:
    Die Kraft des Argumentativen wird meist erheblich überschätzt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Kamikatze ()

  • Haha, jetzt gehts los... Community-Scripting.

    Laut Deinem Logfile scheint er $cellularId nicht als Variable zu interpretieren.
    Werde mir die Servicefiles aber auch mal ins Telefon schieben und versuche es mal zu debuggen.

    Wegen der .roaming: Möglicherweise legt er die erst an, wenn Roaming das erste mal verwendet wird. Aber durch das 'echo "" > ' sollte er die Datei im Filesystem anlegen und somit nur beim ersten mal meckern.
    // Bodenseepirat
  • SonArc schrieb:

    Laut Deinem Logfile scheint er $cellularId nicht als Variable zu interpretieren.
    $cellular ... wer lesen kann ist klar im Vorteil. Okay, hab mich heute durch diverse systemd-Anleitungen gegraben.
    Bon. Dann probiere ich es mal mit fest gescriptetem Pfad. Ist zwar weniger elegant, aber Eleganz darf sich ihnten anstellen, ich will erst eine Funktion. :P

    SonArc schrieb:

    Haha, jetzt gehts los... Community-Scripting.
    Dafür ist eine Community doch da, oder nech? ^^

    Und die roaming könnte man mit einem touch mal anlegen. Selber macht er das wohl erst, wenn die Funktion benutzt wird - ich hatte dein Script da ja schon ein paar mal händisch angestoßen.
    Die Kraft des Argumentativen wird meist erheblich überschätzt.
  • @Kamikatze
    ich habe noch ein Problem mit der Varriablenzuweisung. Wäre schön, wenn ich das noch gelöst bekomme um das ganze so generisch wie möglich zu halten.
    Ansonsten werden die Variablen erst interpretiert, wenn die in Anführungsstriche stehen. - Aktuell habe ich bei mir (funktionsfähig):

    cellularId="cellular_262011205848915_context1"
    echo "" > "/var/lib/connman/$cellularId/stats.home"
    echo "" > "/var/lib/connman/$cellularId/stats.roaming"


    Bei der Zuweisung, wie im Skript, kommt bei mir in einem systemd Durchlauf:
    cellular_262011205848915_context1 Last login: Tue Jan 24 17:52:01 CET 2017
    Interessant wird es, wenn ich den String auf das erste Leerzeichen cutten will. - Dann bekomme ich
    cellular_262011205848915_context1 Last

    Auch wenn ich den String genauer anschaue, habe ich dort kein Steuerzeichen drin.
    // Bodenseepirat