Ina226 i²c-Sensor Spannung und Strom auslesen und in eine Datei schreiben

  • Hallo,

    ich habe den i²c-Sensor ina226 an meinem Pi angeschlossen und möchte gerne die Werte davon auslesen und in eine Datei schreiben.

    Über "sudo i2cdetect -y 1" meldet sich der Sensor schonmal mit 40.


    Folgendes habe ich nach sehr langen suchen gefunden: http://kouzu.info/ina226-sensing-on-raspberrypi-python/


    Jetzt weiß ich erstens nicht ob es das richtige ist was ich dort gefunden habe, weil ich keine Ahnung vom programmieren habe.

    Zweitens kann ich kein Japanisch, sonst könnten mir evtl. die Kommentare ja weiterhelfen :X

    Drittens weiß ich nicht wie ich das von Github auf meinem Pi installiert bekomme.

    Und viertens wäre es total nett wenn mir jemand einen kleinen Code schreibt der mir die Werte dann speichert, ich könnte diesen Code/Datei dann alle 5 Minuten über einen Cronjob aufrufen lasen.


    Ich brauche das ganze um meinen Solarstrombetriebenen SvxLink zu überwachen. Zum einen soll die Batteriespannung überwacht werden und über die Strommessung soll geprüft werden ob die aktive Kühlung des Transceivers noch funktioniert.


    Ich bin mir sicher das mir hier jemand weiterhelfen kann, denn derjenige der mir bei meinem letzten Problem geholfen hatte war einfach toll :thumbup::thumbup::thumbup::danke_ATDE: nochmals!!!

    Achja... gibt es hier eine Möglichkeit für den Betrieb des Forums eine kleine Spende via PayPal zu hinterlassen?


    Lieben Gruß

    Sylvia

  • Jetzt weiß ich erstens nicht ob es das richtige ist was ich dort gefunden habe, weil ich keine Ahnung vom programmieren habe.

    Ich kann kein Japanisch, aber das Repo dazu sieht doch gut aus.

    Zweitens kann ich kein Japanisch, sonst könnten mir evtl. die Kommentare ja weiterhelfen :X

    Siehe 1.

    Drittens weiß ich nicht wie ich das von Github auf meinem Pi installiert bekomme.

    Das speziell nicht, mangels setup.py Datei. Ansonsten git clone <repo_url> && python3 setup.py install. Hier müsstest du einfach das Projekt herunterladen und deinen Code ins selbe Verzeichnis legen (oder es anderweitig im Python Suchpfad verfügbar machen, Infos dazu stehen im Netz.)

    Und viertens wäre es total nett wenn mir jemand einen kleinen Code schreibt der mir die Werte dann speichert, ich könnte diesen Code/Datei dann alle 5 Minuten über einen Cronjob aufrufen lasen.

    Ich glaube, da muss etwas Eigeninitiative her... ist doch gar nicht so schwer, wenn du die Lib hast. Samplecode gibt's im Testcase, dann noch eine Speicherung (wo auch immer, wie auch immer... Textfile? DB?) hinzufügen.

    Ich bin mir sicher das mir hier jemand weiterhelfen kann, denn derjenige der mir bei meinem letzten Problem geholfen hatte war einfach toll :thumbup::thumbup::thumbup::danke_ATDE: nochmals!!!

    Das war ich. Danke Danke :blush:


    Achja... gibt es hier eine Möglichkeit für den Betrieb des Forums eine kleine Spende via PayPal zu hinterlassen?

    Nicht, dass ich wüsste... mir ist nur das bekannt:



    Fragen wir mal ps915 , dbv oder Turael .


    Also: mit dem Repo kannst du doch schon anfangen, auch mit sehr wenig Verständnis von Programmierung – oder?

  • weitens kann ich kein Japanisch, sonst könnten mir evtl. die Kommentare ja weiterhelfen


    Kleiner Tipp: Google kann Japanisch ;-) 
    https://translate.google.de/tr…-on-raspberrypi-python%2F


    Äh Repo????? :conf:

    Wikipedia:


    Ein Repository (englisch für Lager, Depot oder auch Quelle; deutsch Plural Repositorys), auch – direkt aus dem Lateinischen entlehnt – Repositorium (Pl. Repositorien), ist ein verwaltetes Verzeichnis zur Speicherung und Beschreibung von digitalen Objekten für ein digitales Archiv. Bei den verwalteten Objekten kann es sich beispielsweise um Programme (Software-Repository), Publikationen (Dokumentenserver), Datenmodelle (Metadaten-Repository) oder betriebswirtschaftliche Verfahren handeln. Häufig beinhaltet ein Repository auch Funktionen zur Versionsverwaltung der verwalteten Objekte.


    Also ein Repository oder Kurz Repo ist einfach ein Depot für den Quellcode z.B. Github, Gibtlab oder ähnliches.

    Also du soweit ich das sehe brauchst du blos die Daten vom Repo laden.

    Code
    1. git clone https://github.com/R2D2Prj/i2c_sensor

    Git clone lädt das Github-Verzeichnis runter. Es legt automatisch ein Verzeichnis i2c_sensor (mit Namen des Repo) an, in dem du die notwendigen Scripts für das Auslesen findest. Dann solltest du die Dateien bereits ausführen können.


    In wie weit die Chinesischen Zeichen in den Kommentaren eventuell Probleme machen kann ich nicht sagen :conf:, da ich sowas noch nie in meinem Quellcode hatte.

  • Nach viel Bastelei bin ich jetzt schonmal so weit

  • Sieht ja schonmal gar nicht so schlecht aus :-)


    Die für dich relevanten Code-Zeilen wären dann:


    Python
    1. from ina226 import INA226
    2. if __name__ == '__main__':
    3.     sensor = INA226(False)
    4. spannung = sensor.get_voltage()
    5. strom = sensor.get_current()
    6. leistung = sensor.get_power()

    Anmerkung für potentielle Fehlersuche, bin ich grade drüber gestolpert, Python-Code ist in 2.7 also für die Speicherung entsprechende Tutorials für Python 2 verwenden.

    ... dann noch eine Speicherung (wo auch immer, wie auch immer... Textfile? DB?) hinzufügen.

    Hier wärst du uns noch eine Antwort schuldig geblieben... aber vielleicht einfach mal selbst probieren, wir helfen gerne weiter.


    Beispiele einfach googlen z.B. "Python Datei schreiben" https://www.python-kurs.eu/dateien.php

  • Kleiner Tipp: Google kann Japanisch ;-)

    Google Translate ist Müll :baeh2:

    Dann lieber DeepL (https://www.deepl.com/translator), die können noch kein Japanisch.

    Äh Repo????? :conf:

    Darf ich in einem Raspi-Forum nicht mal "Repo" sagen?! ;(

    Aber kann man ja nach suchen bzw. Pertl hat ja ausgeholfen ;)

    In wie weit die Chinesischen Zeichen in den Kommentaren eventuell Probleme machen kann ich nicht sagen :conf: , da ich sowas noch nie in meinem Quellcode hatte.

    In Python 3 kein Problem, sofern die Datei UTF-8 kodiert ist (oder eine andere Kodierung, die mit den Zeichen was anfangen kann. UTF-8 ist aber 1. Wahl)

    Nach viel Bastelei bin ich jetzt schonmal so weit

    Du sollst ja nicht den ganzen Test übernehmen, willst ja keinen Unittest ausführen ;)

    Da ich glaube, dass es hier nicht besonders schnell zu brauchbaren Ergebnissen kommen wird: ein fertiger Haufen Code. Mach damit, was du willst, sollte ein Anfang sein.


    Ungetestet, schreibt bei jedem Durchlauf eine neue Zeile im Format


    Code
    1. Unix-Timestamp,Voltage,Current,Power

    Also einen Unix-Zeitstempel für die Zeit der Messung, die Spannung, den Strom und die Leistung jeweils durch ein Komma getrennt. Quasi CSV. Kann man auch gut weiterverarbeiten.

  • Anmerkung für potentielle Fehlersuche, bin ich grade drüber gestolpert, Python-Code ist in 2.7 also für die Speicherung entsprechende Tutorials für Python 2 verwenden.

    Nö, bitte niemanden anstiften, noch Python 2 zu verwenden! :baeh2:

    python-kurs.eu ist keine, ich wiederhole: keine gute Quelle, um Python zu lernen. Dort wird teilweise nicht sehr idiomatisches Python "gelehrt"...

    Die für dich relevanten Code-Zeilen wären dann:

    z.B. sowas! Dafür bastelt man mindestens eine extra Funktion, ins ifmain sollte am besten nur der Aufruf der Hauptfunktion...

  • Google Translate ist Müll :baeh2:

    Dann lieber DeepL (https://www.deepl.com/translator), die können noch kein Japanisch.

    Ich weiß - aber mangels Japanisch auf die Schnelle keine Alternative parat gehabt. Und bevor ich japanisch lern ist mir google lieber ;-)


    Nö, bitte niemanden anstiften, noch Python 2 zu verwenden! :baeh2:
    ...

    python-kurs.eu ist keine, ich wiederhole: keine gute Quelle, um Python zu lernen. Dort wird teilweise nicht sehr idiomatisches Python "gelehrt"...

    Wenn kein Python 2 in Frage kommt, dann müsste man den Code des Repos anpassen ;-) z.B. i2c_sensor/lib/Adafruit_I2C.py Zeile 50, 77, 85, ...

    Ob dein Code unter Python 2 läuft - kann ich mangels Können und Erfahrung in Python 2 nicht beurtilen - als Quelle habe ich einfach das oberste Ergebnis aus google genutzt.

  • Nö, bitte niemanden anstiften, noch Python 2 zu verwenden

    Go Python2, Go. Leider sind viele Module in Python2 geschrieben....bestimmt weil es Python3 schon seit ewig gibt und es sich so gut durchgesetzt hat :fies: #ewiggestriger

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Wenn kein Python 2 in Frage kommt, dann müsste man den Code des Repos anpassen ;-) z.B. i2c_sensor/lib/Adafruit_I2C.py Zeile 50, 77, 85, ...

    Guter Punkt. Sollte schnell erledigt sein, mit 2to3 vermutlich sogar vollautomatisch.


    Neuer Python 3-angepasster Code (passte nicht mehr in den Beitrag #11, ja ich musste "Diff" wählen, weil Python automatisch erkannt wurde und durch einen aktuellen Bug im Forum alle Kommentare nicht angezeigt werden :baeh2:) :


    bestimmt weil es Python3 schon seit ewig gibt und es sich so gut durchgesetzt hat

    Genau so ist es. Nicht meine Schuld, dass es ein paar Deppen gibt, die Code veröffentlichen und nie wieder aktualisieren! Sollten die besser ganz sein lassen. Aber es gibt ja schnelle Abhilfe...

  • Hallo ihr beiden :)

    dann noch eine Speicherung (wo auch immer, wie auch immer... Textfile? DB?) hinzufügen.

    Hier wärst du uns noch eine Antwort schuldig geblieben... aber vielleicht einfach mal selbst probieren, wir helfen gerne weiter.

    Sorry das ich jetzt erst antworte, aber ich musste mir erst überlegen was am besten wäre.


    Den Sensor wollte ich jede Minute über Cronjob abrufen.


    Also, die Leistung brauche ich garnicht.


    Die Spannung braucht nur in ein Textfile gespeichert werden, z.B. /tmp/Batt.txt und da braucht nur die Spannung drinn stehen und die Datei soll dann immer mit dem aktuellen Wert überschieben werden.


    So und nun kommt der schwierige Teil...

    Ich habe den Strom von der aktiven Kühlung gemessen und bin zu folgenden Ergebnissen gekommen:

    Normaler Betrieb = 0,07 bis 0,18 Ampere

    Ventilator hängt fest = 0,19 Ampere und höher

    Ventilator bekommt keinen Strom oder ist defekt = 0,00 Ampere ...ist ja klar xDDD


    Das Programm müsste nun so aussehen (glaub ich):


    if Ampere <= 0,06 or if Ampere >= 0,19 then halte GPIO 21 (Pin40) dauerhaft auf 0 und schicke eine eMail


    So kann die SvxLink-Software den Transceiver nicht auf Sendung schalten und ich bekomme eine Nachricht was los ist.


    In dem Pi ist eine s.usv verbaut und die Software schickt mir eine eMail wenn die Versorgungsspannung ausfällt und fährt den Pi dann nach 3 Minuten runter. Vielleicht kann man diese Funktion mit dem eMail-Versand ja gebrauchen?


    Falls das mit dem GPIO auf 0 halten nicht geht dann würde ein "shutdown now" nach der eMail auch gehen.


    Und eines muss ich hier nochmal los werden... ich habe noch nie ein Forum erlebt wo mir so gut geholfen wurde ...echt Hammer!!!

  • Neuer Python 3-angepasster Code (passte nicht mehr in den Beitrag #11, ja ich musste "Diff" wählen, weil Python automatisch erkannt wurde und durch einen aktuellen Bug im Forum alle Kommentare nicht angezeigt werden :baeh2: ) :

    Ich gehe davon aus das ich nun deinen Code kopieren, und den alten Code in der Datei damit überschreiben soll? Geht denn dann der Test noch oder muss der auch angepasst werden?