FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: flocko am 27 November 2014, 19:50:58

Titel: Mehrere Sensoren vom Arduino über USB in FHEM Readings
Beitrag von: flocko am 27 November 2014, 19:50:58
Hallo,

hier beschreibe ich einen etwas "dreckigen" Workaround.

Ausgangslage und Ziel

-Arduino mit mehreren Sensoren
-die Arbeit auf dem Arduino soll über die .ino Sketche von Arduino übernommen werden
-die Werte von jedem Sensor am Arduino sollen in ein Reading in FHEM übernommen werden
-die Kommunikation erfolgt über USB

-bei mir hängt eine Photodiode zur Helligkeitsmessung, ein Feinstaubsensor und ein Regensensor am Arduino

Workaround
1.
der Arduino wird mit der Arduino IDE programmiert
2.
Die Werte werden im Serial Port so ausgegeben, dass vor dem Wert eine Buchstabenkombination ausgegeben wird, um die Werte später für die Readings zu identifizieren.
Beispiel hier für meinen Feinstaubsensor und den Helligkeitssensor (HHEL):
Serial.print("LPO");
   Serial.println(lowpulseoccupancy);
   Serial.print("LRAT");
   Serial.println(ratio);
    Serial.print("LKON");
    Serial.println(concentration);
Serial.print("HHEL");
Serial.println(lightLevel);


3.
An der Arduino IDE am Serial Monitor prüfen, ob die Werte korrekt ausgegeben werden. Ich habe es mit dem "sleep" Befehl so programmiert, dass nur alle 30 Sekunden gemessen wird.

4.
Per cat /dev/ttyACM0 (USB Device anpassen) herausfinden, ob der serielle Output korrekt an den FHEM Server übermittelt wird.

5.
# Die serielle Ausgabe des Arduinos in eine Datei schreiben.
Bash script schreiben in dem folgender Befehl ausgeführt wird: cat /dev/ttyACM0 > /opt/fhem/arduino.log


6. Shell script ausführbar machen und automatisch mit dem System als Hintergrundprozess starten lassen.

7. In FHEM die Werte übernehmen. Bei mir geht es so:
Ich habe ein CustomReadings erstellt und Frage die Werte aus der Datei "arduino.log" ab und lass sie in Readings schreiben, dabei werden die anfänglichen Buchstaben aus der Arduinoausgabe (LPO usw..) genutzt um die Werte zu identifizeren. Gleichzeitig werden diese Werte mit "cut" abgeschnitten.

konzentration:qx(tail -10 /opt/fhem/arduino.log | grep -E LKON | grep -v 'LKON0.62' | cut -b 6-23 2>&1), LowPulseOccupancy:qx(tail -10 /opt/fhem/arduino.log | grep -E LPO | grep -v 'LPO0' | cut -b 5-23 2>&1), ratio:qx(tail -10 /opt/fhem/arduino.log | grep -E LRAT | grep -v 'LRAT0.00' | cut -b 5-23 2>&1)

(Dabei besagt: "| grep -v 'LKON0.62'" das die Werte mit 0.62 ignoriert werden, da dies in meinem Feinstaubsensor eine Fehlmessung bedeutet.)

Dieses HowTo ist nicht ganz so ausführlich geschrieben, allerdings bietet es den kompletten Workaround.
Es funktioniert jetzt seit einigen Wochen stabil.
Falls jemand eine bessere Lösung findet, wäre ich dankbar.
Ansonsten bin ich froh, falls ich jemanden in die richtige Richtung stupsen konnte.

Viele Grüße
flocko
Titel: Antw:Mehrere Sensoren vom Arduino über USB in FHEM Readings
Beitrag von: Mabu am 02 Januar 2015, 13:19:52
War super hilfreich für mich, da ich auch gerne mit Arduinos arbeite, zum Beispiel für die Wärmeerzeuger- und Pufferspeichersteuerung und dabei auch viele S0-Schnittstellen einfachst auslesen kann. Jetzt möchte ich ein übergeordnetes Frontend mit FHEM "drüberstülpen".
Titel: Antw:Mehrere Sensoren vom Arduino über USB in FHEM Readings
Beitrag von: Henne16 am 03 Januar 2015, 21:16:51
Hallo Flocko,

kannst Du das mit dem Bash Script genauer beschreiben.
Ich habe keine Idee wie es aussehen sollte.
Vielleicht kannst Du es ja als Datei anhängen.

Vielen Dank im voraus.

Viele Grüße Henne16
Titel: Antw:Mehrere Sensoren vom Arduino über USB in FHEM Readings
Beitrag von: m2th3o am 03 Januar 2015, 23:17:48
Hallo,

Ich hatte vor kurzem im RPi Forum mein Projekt Piduino vorgestellt.

http://forum.fhem.de/index.php/topic,30565.0.html

Bei mir waren zwei Pis im Spiel und ich hab ohne File direkt über Python die seriellen Cmds vom Arduino abgefangen und per Post an FHEM geschickt. Man kann ja - hat man beides auf einem Device - einfach die lokale IP aufrufen.

Hoffe, es hilft euch.

Gruß,
Markus