Temperaturabfrage von Arduino über i2c

Begonnen von roschi13, 11 Juni 2018, 20:15:30

Vorheriges Thema - Nächstes Thema

roschi13

Hallo zusammen...

Ein Kollege und ich möchten ein kleines Projekt realisieren.
Wir haben mit dem Raspberry Pi und FHEM z.b. über einen Selbstbau-CUL eine Steckdose gesteuert.
Nun haben wir vor eine Temperatur abzufragen, der Temperatursensor befindet sich allerdings an einem Arduino Uno und dieser ist über i2c mit dem Pi verbunden.
Die Verbindung steht und nun fehlt uns noch die Temperaturanzeige in Fhem.
Ich habe auch ein Device namens "Gewaechshaus" über RPII2C angelegt, es zeigt auch initialized an.
Wie gesagt würden wir gerne die Temperatur in FHEM anzeigen.
Wie gestalten wir das nun am besten.
(Sind FHEM-Neulinge)

Vielen Dank im voraus

sash.sc

Realisiere es am besten mit espeasy und nem wemos d1 mit nem passendem Sensor.



Gesendet von meinem E6653 mit Tapatalk
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Beta-User

Wieso einen Wemos empfehlen, wenn es mit einem Kabel geht und der Sensor an sich funktioniert?
Von I2C am Pi verstehe ich nichts, aber warum nutzt ihr nicht die USB-Funktionalität und ein einfaches Protokoll, die Daten darüber zu geben wie keyValueProtocol?
Dann kann der PI zwar nicht die Abfrage auslösen, aber die Werte würden sauber reinkommen; kann man ja zyklisch machen.

Weitere Variante: ein bidirektionales Protokoll wie MySensors, dann kann man auch explizit nach einem Wert fragen. Setzt aber etwas mehr C-Kenntnis voraus...
Just my2ct.
Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

yoda_gh

Zitat von: roschi13 am 11 Juni 2018, 20:15:30
Nun haben wir vor eine Temperatur abzufragen, der Temperatursensor befindet sich allerdings an einem Arduino Uno und dieser ist über i2c mit dem Pi verbunden.
Die Verbindung steht und nun fehlt uns noch die Temperaturanzeige in Fhem.

Das heißt der Arduino läuft als I2C-Slave? Interessant, habe eben erst gelernt, dass er das überhaupt kann. Wenn Du das wirklich so umsetzen willst, müsstest Du Dir ein kleines Protokoll überlegen und dafür ein passendes FHEM-I2C-Modul schreiben. Oder gibt es dafür etwas fertiges, was ich nicht kenne?

Einfacher wäre aber vermutlich, Du nutzt etwas fertiges, z.B. Firmata und bindest den Arduino über RS232 an, siehe https://wiki.fhem.de/wiki/Arduino_Firmata.

Oder Du steckst ein Ethernet Shield auf den Arduino, verbindest die beiden über Netzwerk und verwendest z.B. auf Arduino-Seite die Webduino-Bibliothek und auf FHEM-Seite HTTPMOD - so habe ich meine ganzen Arduinos angebunden...

roschi13

erstmal danke für die antworten.

wir haben uns für den i2c entschieden, da es sich hierbei um ein projekt für die abendschule handelt.
der lehrer würde gerne eine verbindung über spi, i2c oder rj45 sehen...
mein kollege hatte zunächst rj45 probiert, ist aber recht früh nicht mehr weitergekommen.
nun haben wir i2c und es läuft ja eigentlich, also wir können über den Rpi den (Temperatur-)Wert abfragen und er kommt in Hexadezimal an.
Jetzt müssten (oder besser möchten)wir wie gesagt den wert gern in FHEM anzeigen.
-es langt der wert, es muss kein Diagramm o.ä. sein.


yoda_gh

Zitat von: roschi13 am 11 Juni 2018, 22:00:44
wir haben uns für den i2c entschieden, da es sich hierbei um ein projekt für die abendschule handelt.
der lehrer würde gerne eine verbindung über spi, i2c oder rj45 sehen...

mein kollege hatte zunächst rj45 probiert, ist aber recht früh nicht mehr weitergekommen.

Nur interessehalber: was ist mit RJ45 gemeint? Das ist ja erstmal nur ein Stecker.

Zitat von: roschi13 am 11 Juni 2018, 22:00:44
nun haben wir i2c und es läuft ja eigentlich, also wir können über den Rpi den (Temperatur-)Wert abfragen und er kommt in Hexadezimal an.

Aha, dann bitte etwas mehr konkrete Informationen! Ihr habt also schon die Arduino-Seite fertig programmiert, richtig? Wie könnt Ihr über den RPI den Wert auslesen? Mit einem eigenständigen Programm/Script?

Zitat von: roschi13 am 11 Juni 2018, 22:00:44
Jetzt müssten (oder besser möchten)wir wie gesagt den wert gern in FHEM anzeigen.

Ihr habt jetzt zwei grundlegende Möglichkeiten:


  • die I2C-ANbindung in FHEM realisieren - dann braucht ihr wie schon gesagt vermutlich ein eigenes, kleines, neues FHEM-I2C-Modul - habt Ihr Perl-Programmier-Erfahrung? Wenn nicht, würde ich davon eher abraten.
  • in FHEM ein Dummy-Device anlegen und in Eurem existierenden I2C-Testprogramm die Werte von außen in FHEM füttern, z.B. über das FHEM-Telnet-Interface oder fhem.pl. Vermutlich die eifnachste Lösung. (ungefähr so: "/opt/fhem/fhem.pl 7072 set meinSensor temp 12")



Zitat von: roschi13 am 11 Juni 2018, 22:00:44
es langt der wert, es muss kein Diagramm o.ä. sein.

Wenn Ihr die Daten mal in FHEM habt, ist das Anlegen des Diagramms einfach... :)

roschi13

Servus,

also über
get <Name> read 0x05
zeigt er uns den Temperaturwert an...
Wie bekommen wir das nun dauerhaft im Device angezeigt?
(und da du ja sagtest ein Diagramm wäre easy, hätte wir das nun doch gern)

mfg
roschi

yoda_gh

Zitat von: roschi13 am 12 Juni 2018, 19:50:00
also über
get <Name> read 0x05
zeigt er uns den Temperaturwert an...

Ah, stimmt, daran hatte ich nicht mehr gedacht, dass RPII2C direkten Zugriff auf I2C-Werte über get erlaubt.

Zitat von: roschi13 am 12 Juni 2018, 19:50:00
Wie bekommen wir das nun dauerhaft im Device angezeigt?

Hmm, gute Frage. Normalerweise verwendet man für das Auslesen von I2C-Geräten nicht RPII2C direkt, sondern device-spezifische FHEM-Module (I2C_*), die alle einen internen Timer aufsetzen und regelmäßig die Werte auslesen und in einem passenden Reading zur Verfügung stellen. Was Du jetzt bräuchtest, wäre entweder ein generisches I2C-Modul, das diese Funktionalität device-unabhängig anbietet - oder einen allgemeinen FHEM-Mechanismus, der regelmäßig ein get ausliest und in ein Reading steckt. Ich glaube, beides gibt es nicht fertig.

Evtl. hilft I2C_EEPROM, aber genau weiß ich nicht, wie das funktioniert, vielleicht mal testen.

Ansonsten sollte es mit einem "dummy"-Device und dem "at"-Kommando (für beides siehe https://fhem.de/commandref.html) plus ein paar Zeilen Perl-Code vermutlich relativ einfach sein, das "get" z.B. alle paar Sekunden zu triggern und als reading in das Dummy-Device zu schreiben.

Zitat von: roschi13 am 12 Juni 2018, 19:50:00
(und da du ja sagtest ein Diagramm wäre easy, hätte wir das nun doch gern)

Das ist zumindest mal ein Standard-Feature von FHEM. :) Wenn Ihr es geschafft habt, dass in irgendeinem Device ein passendes Reading regelmäßig automatisch aktualisiert wird, müsst Ihr ein FileLog an den entsprechenden Event hängen und auf der FileLog-Seite kann man dann schnell ein Diagramm über das SVG-Modul zusammenklicken. Dazu sollten sich viele Anleitungen im Netz finden...

yoda_gh

Achja, wenn Ihr den Weg über dummy+at gehen wollt, finden sich ein paar nützliche Hinweise im Abschnitt "Perl specials" in der commandref, siehe Link in meinem letzten Post.

roschi13

Sau gut, vielen Dank!!!
Werde ich heute Abend ausprobieren!