I2C AD-Wandler ADS1115 von Texas Instruments

Begonnen von schlawiano, 31 Mai 2016, 11:55:31

Vorheriges Thema - Nächstes Thema

schlawiano

Anbei jetzt im ersten Eintrag die aktuelle Version

Status: ist immer noch Beta,  bis ausreichend getestet wurde.






ZitatBaut zufällig jemand an einem Modul für den I2C AD-Wandler ADS1115 von Texas Instruments ???

( Ich frage, weil ich ein Modul gerade ein Modul für den BH1750FV gebaut habe - 2 Tage später war dann ein weiteres drin.)


Falls nein, können gerne Anregungen und Ideen genannt werden für meine Umsetzung genannt werden.



Hier nur ein paar Anwendungsbeispiele, für was ich das Ganze nutzen möchte

1) Lichtsensor derzeit per Poti-Einstellung an Digitalausgang getriggert - das ist nicht fein genug. Besser ist den Analog-Ausgang zu messen und den Schwellwert per Software zu bestimmen.

2) beim CO-Gas-Detector (z.B. M2) wird über einen Heizdraht der Widerstand ausgewertet. Ist es im Zimmer warm gibt es ständig Fehlalarme, auch hier wäre eine Messung am Analog-Ausgang und Meldung unter Berücksichtigung der Zimmertemperatur sinnvoll.

3) Regensensor (Modul YL-38). Es interessiert auch hier, nicht nur ob es regnet, sondern auch wie stark.

locutus

Ich kann zwar nicht mitentwickeln, aber interessiert bin ich schon.
Ursprünglich wollte ich einen SCT-013 non-invasive AC Current Sensor am ADS1115 betreiben, um damit den Stromverbrauch zu erfassen.
Bsp.: http://www.seeedstudio.com/recipe/377-esp8266-iot-energy-monitor.html

schlawiano

Mitentwickeln erwarte ich gar nicht. Eher mal mittesten, wenn ich es auf einen brauchbaren Stand gebracht habe;-)

Na dann mach ich mich mal die nächsten Tage ans Werk. Bei dem Regenwetter ist es nicht schlecht mal am PC zu tüfteln.

kpl

Hallo schlawiano,
Ich kann auch gerne mit testen. Ich verwende den ADS1115 zur Batteriespannung und Strommessung über LEM HTFS 400-P/SP2 Stromwandler einer Insel Solaranlage.
Derzeit übertrage ich die Messwerte noch über ein python script an FHEM.
Gruß, kpl

schlawiano

Ich komme nächste Woche noch mal auf Euch zu
Danke für die Rückmeldung

schlawiano

#5
Vll. hat jemand eine Idee oder Anregung.

1) Frage
Der Chip unterstützt 4 Eingänge, dazu können diese noch unterschiedlich miteinander verglichen werden.

Theoretisch wären 2-4 Readings (Messungen) der Werte möglich.

Für jede Messung  soll man (Enabled, SamplingRate, Gain, GültigerRahmen) verschieden einstellen können.
Nun meine Frage, wie sollte man am besten die Attribute gestalten ?

z.B.
SINGLE_2_Config_Gain
SINGLE_2_Config_DataRate
SINGLE_2_Config_LowThreshold
SINGLE_2_Config_HighThreshold

und das ganze 8 mal ?
oder besser

SINGLE_2_Config mit einen Wert der geparst wird ?

oder gibs so was wie Unterattribute ?

Eine Idee wäre auch Untermodule für die Eingänge zu machen, die man dann mit dem ADS1115 verknüpft


2) geplant ist derzeit nur ein Polling. Sprich Auslesen aller gewünschten Readings. Wäre das ok, oder braucht jemand
verschiedene Timings für verschiedene Eingänge ?

klausw

Zitat von: schlawiano am 03 Juni 2016, 09:55:06
Vll. hat jemand eine Idee oder Anregung.

1) Frage
Der Chip unterstützt 4 Eingänge, dazu können diese noch unterschiedlich miteinander verglichen werden.

Theoretisch wären 2-4 Readings (Messungen) der Werte möglich.

Für jede Messung  soll man (Enabled, SamplingRate, Gain, GültigerRahmen) verschieden einstellen können.
Nun meine Frage, wie sollte man am besten die Attribute gestalten ?

z.B.
SINGLE_2_Config_Gain
SINGLE_2_Config_DataRate
SINGLE_2_Config_LowThreshold
SINGLE_2_Config_HighThreshold

und das ganze 8 mal ?
oder besser

SINGLE_2_Config mit einen Wert der geparst wird ?
Das ist eher eine philosophische Frage. Zum einen ist weniger oft mehr. Zum anderen bietet FHEM bei den Attributen Checkboxen, Dropdown Menüs, Drag&Drop die eine Konfiguration recht komfortabel machen.

Gibt es unterschiede bei den Konfiguration zwischen Absolut und Differenzmessung?
Evtl. kommen da weitere Attribute hinzu.


Zitat von: schlawiano am 03 Juni 2016, 09:55:06
oder gibs so was wie Unterattribute ?
gibt es leider nicht
die Attribute lassen sich auch leider nicht dynamisch anpassen (...obwohl, evtl. kann man $hash->{AttrList} dynamisch modifizieren... das wäre einen Versuch wert, wenn du das versuchst halte mich bitte auf dem Laufenden  8))

Zitat von: schlawiano am 03 Juni 2016, 09:55:06
Eine Idee wäre auch Untermodule für die Eingänge zu machen, die man dann mit dem ADS1115 verknüpft
Oder direkt Module, die jeweils nur einen Eingang lesen (also im Define I2C-Adresse und Kanal angeben /bzw. 2 Kanäle bei Differenzmessung)
Das ist natürlich elegant, aber auch komplex, da unterschiedliche Kanäle evtl. auf gleiche Register zugreifen.
Ausserdem musst du beim anlegen nachprüfen, ob es bereits ein define für den gleichen Kanal gibt.


Zitat von: schlawiano am 03 Juni 2016, 09:55:06
2) geplant ist derzeit nur ein Polling. Sprich Auslesen aller gewünschten Readings. Wäre das ok, oder braucht jemand
verschiedene Timings für verschiedene Eingänge ?
Das polling machst du bestimmt über ein Attribut einstllbar?
Es ist sicher am sinnvollsten, alle Werte auszulesen. Unterschiedliche Pollzeiten machen die Abfrageroutine recht komplex.
Allerdings hat der ADS1115 noch einen ALERT Ausgang. Ich habe das Datenblatt nur überflogen, aber wenn ich es richtig verstanden habe, kannst du Schwellwerte programmieren, deren unter/überschreiten den ALERT Pin toggelt.
Attribute für das Setup dieses Pins wären sicher super.
Dann kannst du über einen GPIO Interrupts bei Änderung auslösen und Ereignisgesteuert die Werte auslesen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

schlawiano

#7
Hallo Klaus,

danke für die Rückmeldung.

Ich habe gestern mal ein Perl-Skript gebastelt um zu schauen, wie der Sensor sich real verhält
und bin gerade am Testen.



Hier einige Gedanken um Deine  Idee mit dem "pro Modul getrennten Eingang" weiterzuspinnen.
- bei kleiner  SamplingRate , minimal 8SPS, d.h. Lesedauer dann mit 125 ms sollte das Ganze asynchron laufen
um nicht andere Prozesse zu blockieren. Bei pro Eingang getrennten Modulen müsste man sicherstellen,
dass andere Module nicht zeitgleich auf den Sensor zugreifen(Semaphoren) und die Aufgaben danach trotzdem abarbeiten (queues).

Wenn man schon so weit geht, kann man dann auch ein getrenntes Polling erlauben.

Semaphoren und queues müssten für den Sensor zentral abgelegt werden.


Wenn ein Messvorgang zum ALERT/RDY meldete, sollte man wissen, was zuletzt gemessen wurde (also wo die Grenze verletzt wurde).
Auch wäre eine zentrale Stelle sinnvoll.

Da ich so oft die zentrale Stelle betone, merkst Du sicher dass ich auf 2 Module hinaus möchte


52_I2C_ADS1115_Channel
   Attribute:
      Mux (SINGLE0..3, oder einen DIFF_X_Y)
      Interval
      Gain
      DataRate
      LowerThreshold,
      UpperThreshold,
      ComparatorMode
      ComparatorPolarity
      LatchingComparator
      Offset ( Verschiebung des Messwertes nach dem Lesen)
      Faktor   ( Multiplikation  des Messwertes nach dem Lesen)
   Readings:
      State
      


52_I2C_ADS1115
   Define
      I2C-Adresse
   Internal
      MODUL_STATE (DEFINED, ERROR, )
      DEVICE_STATE (READY, CONFIGURE, MEASURING)
      LAST_CHANNEL (Name vom 52_I2C_ADS1115_Channel)
      CURRENT_CHANNEL (Name vom 52_I2C_ADS1115_Channel)
   
   Queues
   Clients


Was denkst Du ? Viel Arbeit, aber wahrscheinlich ein guter Weg ?

Viele Grüße
Karsten

klausw

Moin Karsten,

stimmt sobald ein asynchroner Zugriff notwendig ist machen 2 Module durchaus Sinn.
Der Aufwand ist schon höher aber sicher überschaubar.
Die Frage ist eher, ob du Lust hast es zu machen 8) Sauberer ist die Lösung sicherlich.

Ein Modul wird für gewöhnlich einmal definiert und dann ist gut. Wenn du nicht über Hilfsmodule wir readings Proxy gehen musst wird es natürlich einfacher. Aber wie gesagt, das machst du nur einmal.



RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Prof. Dr. Peter Henning

Vlt. mal ansehen, wie ich das beim Modul OWAD (4-fach A/D-Wandler) gelöst habe. Der Witz ist dort, dass die Kanalnamen, Attribute und Skalenfunktionen per Attribut gesetzt werden können.

Es ist nämlich sinnvoller, in den Readings gleich den korrekt umgerechneten Datenwert "CO-Gehalt" angezeigt zu bekommen, als einen kryptischen Spannungswert.

LG

pah

schlawiano

#10
Hallo Prof. Dr. Peter Henning,

leider sah ich Ihre Info zu spät. Inzwischen habe ich einen großen Teil schon umgesetzt.
Ihr Ansatz ist durchaus interessant. Bei 4 Kanälen sind die 24 Attribute durchaus überschaubar. Man nutzt ja nicht alle.
Beim ADS 1115 kommen noch die 4 Differenz-Messungen zwischen einzelnen Kanälen dazu. Das wären dann 8 Varianten * Konfigurationsparameter. Auch da scheint auf den ersten Blick der ADS1115 mehr Möglichkeiten zur Konfiguration  zu bieten. Hier würde es den Nutzer an Attributen erschlagen.
Ich empfinde die jetzige Lösung als ganz praktikabel. Jeder Eingang ist eine eigene Modulinstanz. Man kann diese nach dem Kontext benennen und den Wert dort direkt abgreifen. Pro Eingang kann man nun ein eigenes Polling definieren.
Je nach dem was ich messen möchte, könnte sich das als nützlich erweisen. Z.B. würde ich aus Faulheit einen Eingang den Bewegungsmelder (TTL) dranhängen. Hier sollte jede Sekunde gemessen werden, an einen anderen Eingang den Lichtsensor mit analogen Ausgang, wo ich nur aller 5 Minuten den Wert abfragen möchte.

Technisch läuft das derzeit so:

Das Sensor-Modul, ADS1115
   Verwaltete die Verbindung, Lesen und Schreiben zum I2C-Bus.
   Synchronisiert die Anfragen von Eingängen (semaphoren, queue)

Das Eingangs-Modul, ADS1115_AI
   Hält die Konfiguration, die Schwellen (in Volt),  den Verweis auf das Sensor-Modul
   hat ein Reading auch in Volt (Umrechnung mittels Gain)
   jeder Eingang sendet per Polling oder manuell eine Anfrage an das Sensor – Modul

Probleme sehe ich derzeit, wenn der Sensor so programmiert wird, dass der Alert/Rdy-Pin ausgewertet werden soll. Meine Idee passt nicht zu jedem Modus. Z.B. bei eingeschalteten Comparator-Latch bleibt das Signal erhalten bis man das conversion-Register ausliest. Das dürfte man in dem Fall nicht sofort machen, sondern müsste jemand von außen veranlassen. Bis dahin würde der Sensor stehen ?
Auch funktioniert alles im Single-Shot-Modus.  Der Continuous-Mode ist schnell, aber funktioniert nur, wenn man die Konfiguration nicht ändert. (was bei wechselnden Eingängen der Fall wäre). Das zu prüfen, ob die letzte Konfiguration noch der aktuellen entspricht. Das würde vermutlich genauso viel Zeit verbrennen wie man mit dem Continuous-Mode gut macht. Also es gibt noch offen Fragen.

Die kommende Version wird sicher noch wacklig laufen und für einigen Gesprächsstoff sorgen.

LG Karsten

schlawiano

So ein MIST  :-\ :-\ :-\ :-\

Fast fertig und dann Transfer-Fehler

klausw

Zitat von: schlawiano am 14 Juni 2016, 17:57:59
So ein MIST  :-\ :-\ :-\ :-\

Fast fertig und dann Transfer-Fehler

Sag nicht du hast keine Sicherungen gemacht.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

schlawiano

#13
Hatte mich ein bisschen zu sehr auf Notepad++ und WinSCP aus Bequemlichkeit verlassen und hatte den Umfang auch etwas unterschätzt.. Alles außer dem Pi hat Komplettsicherung... naja... so ungefähr weiß ich noch was ich programmiert habe und das Testscript gibt es auch noch.... 3-4 Feierabende werde ich nun noch mal investieren müssen... trotzdem ärgerlich...

schlawiano

So nun ein erster Prototyp... ich weiß es gibt noch viel  zu tun... also 100% stabil läuft er noch nicht, Doku wurde auch nicht hinterlegt.

Generell gibt es 2 Module

I2C_ADS1115 ist die Steuerung des Sensors

Hier landen vom Eingang oder Eingängen die Befehle, diese werden der Reihe nach ausgeführt (Qeue)
Nur er schreibt und liest vom I2C-Bus

Daher muss er auch wie ein anderes I2C-Gerät definiert werden

define myADS1115 I2C_ADS1115 0x48 # I2C-Adresse des ADS1115
attr myADS1115 IODev raspBerryBus # z.B. vom TYP RPII2C
attr myADS1115 verbose 5



I2C_ADS1115_AI ist der Eingang bzw. Eingangsdifferenz


Per Define legt man des zugehörige Sensor - Modul fest.

z.B.
define myADS1115_AI I2C_ADS1115_AI myADS1115
attr myADS1115_AI Threshold_Low_Voltage 3
attr myADS1115_AI interval 5 # in Minuten



Hier kann alles mögliche Sensor-typische konfiguriert werden.

AUTO_READ sollte man nur abschalten, wenn man selber den Sensor z.B. nach
über den Rdy/Alert Pin steuern möchte. In diesem Fall bleibt der Sensor nach der Konfiguration
in dem Zustand. Der Nutzer muss dann per Update des Eingangs oder per ReleaseLastOrder
im Sensor-Modul dafür sorgen, dass es weiter gehen kann.

OPERATION_MODE= Continuously funktioniert nur mit einem Eingang. Der Nutzer muss selbst einmalig vom
Eingang einen Configure-Befehl (Set) senden und danach werden via Polling oder Update-Befehl (Set
die Werte vom Eingang gelesen.

OPERATION_MODE= SingleShot, hier wird alles automatisch gemacht. Beliebig viele Eingänge können geschalten
werden.

Vll. hat ja jemand Lust zum Spielen.

Bei Problemen bitte mal verbose auf 5 setzen und das Log zuschicken.
Sollte ich was falsch verstanden oder umgesetzt haben, wäre natürlich auch eine Rückmeldung Klasse.



klausw

Hallo Karsten,

ich benötige dein Modul im Mon nicht, aber ein bisschen Senf kann ich trotzdem dazugeben ;)

Theoretisch könntest du beide Module zu einem zusammenfassen.
Die interne Auswahl, ob Master oder Slave führt dann über die Optionen in der Definition.

Grüße
Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

schlawiano

Hallo Klaus,

Dankeschön,
Deine Idee würde das Modul vll. komfortabler machen. Ich ziere mich da gerade ein bisschen.

Nach dem define müsste ich attribute, set's, internals, timer etc. neu setzen bzw. umbauen.
Ggf. kommt im laufenden Betrieb ein re-define.

Das wird mir zu konfus  ;)

Viele Grüße
Karsten

kpl

Hallo Karsten,

eine erste kurze Rückmeldung von meinen Tests. Ich habe häufig das Problem das ein falsches Ergebnis von -6,144 zurück kommt.  Die GAIN Angabe in Worten finde ich etwas verwirrend kann aber durchaus damit leben. Bei der INTERVAL Angabe würde ich Sekunden anstatt Minuten bevorzugen.

2016.07.02 17:48:10 5: [AD2] IC2_ADS1115_Update, Call IC2_ADS1115_CheckSensorState
2016.07.02 17:48:10 1: [AD2] I2C_ADS1115_Current Anzahl = 865
2016.07.02 17:48:10 5: [AD2,I_Wind] IC2_ADS1115_Update
2016.07.02 17:48:10 5: [I_Wind] I2C_ADS1115_AI_Poll call InternalTimer with 300 seconds
2016.07.02 17:48:10 5: [AD2] IC2_ADS1115_I2CRec  received: checksensorstate 193 152
2016.07.02 17:48:10 1: [AD2] I2C_ADS1115_Current Anzahl = 865
2016.07.02 17:48:10 5: [AD2] IC2_ADS1115_ReadValues
2016.07.02 17:48:10 5: [AD2] IC2_ADS1115_I2CRec  received: voltage 255 255
2016.07.02 17:48:10 1: [AD2] I2C_ADS1115_Current Anzahl = 865
2016.07.02 17:48:10 5: [AD2, I_Wind] IC2_ADS1115_GetVoltage  received: word: 65535, voltage: -6.144
2016.07.02 17:53:10 1: [AD2] I2C_ADS1115_Current Anzahl = 865
2016.07.02 17:53:10 5: [AD2,U_Test] IC2_ADS1115_Update
2016.07.02 17:53:10 5: [AD2,U_Test] IC2_ADS1115_Update Threshold:0x8000 - 0x7FFF
2016.07.02 17:53:10 1: [AD2. U_Test] IC2_ADS1115_ConfigWord Word: 0b1101000110011000


Gruß
Peter

schlawiano

Hallo Peter,
ich komme am Wochenende aus dem Urlaub zurück. Da schaue ich es mir genauer an.
Bei mir auf den Rechner gibt es eine gefixte Version und Deiner wird die Qeue nicht sauber abgearbeitet.
Man sieht im Deinem Log die Anzahl über 800.. das sollte nicht so sein.
Mit dem Interval... hatte ich an meiner Verwendung orientiert ( ich benötige nur Minutentakt) auch arbeiten viele andere Sensoren so. Man kann es mit Gleitkommawerten auf Sekunden runterbrechen.. Wenn weitere die Sekundenangabe als besser empfinden , baue ich es um.. kein Problem ;-)
Gruß Karsten

schlawiano

Anbei die neuste Version zum Testen. (Mit einigen Bugfixes)

kpl

Hallo Karsten,

du hast es Prinzipiell richtig erkannt. Ich hatte beim Testaufbau ein Problem mit der Stromversorgung. Ich habe deine Aktualisierte Version jetzt seit gut einen Tag mit einen Abfrage Intervall von einer Minute am laufen und alle Messwerte liegen im erwarteten Bereich. Der Zähler geht auch nicht mehr nach oben.

Danke,
Peter

klausw

@schlawino: ich würde empfehlen die neuste Version immer in den ersten Post zu packen und vor allem ältere Varianten deiner Module zu löschen. Im Moment gehts vielleicht noch, aber wenn der Thread etwas umfangreicher wird wirst du vermutlich mit Fragen gelöchert, die sich auf längst behobene Probleme beziehen.  ;)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

schlawiano

@Klaus, Danke werde ich künftig beherzigen..

Viele Grüße
Karsten

Per

Bevor ich was Eigenes baue, frage ich lieber hier nach: lebt das Modul noch? Wird es noch gepflegt? Die letzte Version ist fast nen Jahr alt, das es die finale ist, habe ich aber nicht lesen können.

schlawiano

Es lebt zumindest bei mir im Fhem noch  ;)
Ich bräuchte auch ein bisschen Feedback, ob und wie es bei anderen läuft.
Bei Problemen würde ich mich darum kümmern, und wenn es andere länger im Einsatz hatten auch ins Repository heben.

Grüße Karsten

Per

OK, mein aktueller Plan ist folgender: erstmal ein wenig mit dem Teil auf dem Test-Raspi spielen, anschließend die Soll-Sensoren (Stromfühler) darum stricken, dann mit deinem Modul ins FHEM heben. Kann also 1-2 Wochen dauern, bis es wieder eine Rückmeldung gibt (wenn die RGBWW-Controller kommen, kann es sich nochmal etwas verschieben :-[).
Aber jetzt lag das es schon ne Weile, denke, da kommt es nicht auf Stunden an.

Prof. Dr. Peter Henning

Es ist zwar immer gut, wenn wir Verstärkung bei der Entwicklung neuer Module bekommen.  Allerdings ist es nicht sonderlich zielführend, wenn für jeden Chip gleich mehrere Module mit kryptischen Namen wie "52_I2C_ADS1115.pm" und "52_I2C_ADS1115_AI.pm" existieren. Irgendwann blickt nicht einmal mehr der Experte durch.

Darum erstens: Volle Unterstützung für den Vorschlag von klausw, diese beiden Module zusammenzuführen.

Zweitens die Bitte, dieses Modul auch so generisch anzulegen, dass es für beliebige AD-Wandler am I2C-Bus erweiterbar wäre.

LG

pah

Per

#27
Ob das mit beliebigen Wandlern machbar ist, weiss ich nicht, aber zumindest die ganze ADS1x1x-Familie und das Zusammenfassen beider Module sollte problemlos machbar sein.

@schlawiano: könntest du im ersten Post den aktuellen Status sowie die aktuellen Downloads hinterlegen (und die anderen löschen)?

schlawiano

Hallo,

da ich es bisher auch nur von der Hardware her den ADS 1115 genutzt habe, wurde es so benannt. Ich habe nichts gegen eine Umbenennung, wenn sich bestätigt, dass
die ganze Produktfamilie kompatibel ist.
Ich hatte die anderen Datenblätter noch nicht in der Hand. Wenn jemand mehr weiß, ich lasse mich hier gerne beraten.

Mir wäre es auch lieber, wenn wir beide Module in eine Datei packen könnten (sofern das inkludieren von FHEM das so hergibt, das müsste ich prüfen).

Die beiden Module zu einem zu vereinen, widerspricht der Programmierung und Idee dahinter. Ziel war es für jeden Eingang eine beliebig Einstellung hinterlegen zu können.
Daher gibt es für jeden Eingang auch eine einzelne konfigurierbare Instanz. So kann ich auch einfach einen Timer pro Eingang hinterlegen. So wird es bei mir genutzt.
Der Regensensor sollte bereits nach 5 Sekunden merken, dass sich was ändert (Alarmierung bei offenen Fenster). Beim Lichtsensor am anderen Eingang benötige ich nur Werte aller 5 Minuten.
Das Hauptmodul managt (Locking, Queues) die Eingänge.
Das zu ändern, wäre ein grundsätzlicher Neuaufbau, damit ein neues Modul ... und auch ein anderer Entwickler, der das dann programmiert. ;)

Per

Zitat von: schlawiano am 10 April 2017, 13:45:56Ich habe nichts gegen eine Umbenennung, wenn sich bestätigt, dass
die ganze Produktfamilie kompatibel ist.
Sind sie nicht, sie unterscheiden sich u.a. in der Auflösung (111x = 16 bit, 101x = 12 bit), das sollte aber zu beherrschen sein.

Zitat von: schlawiano am 10 April 2017, 13:45:56Die beiden Module zu einem zu vereinen, widerspricht der Programmierung und Idee dahinter. Ziel war es für jeden Eingang eine beliebig Einstellung hinterlegen zu können.
Das eine schließt das andere nicht aus. Erst definierst du einen Master und danach darauf basierend die Eingänge. Musst "nur" :D die Syntax anpassen und die define/set... dem entsprechenden Modul-Teil zuordnen.

Prof. Dr. Peter Henning

Pardon, wenn ich das so direkt sage: Ein Modul pro Eingang ist einfach ein unsinniger Overhead.

Als Beispiel kann ich das Modul OWAD anführen: Auch darin kann man für jeden Eingang des 4-fach ADC diverse Dinge konfigurieren, ohne dass wesentliche Strukturen wie Hashes etc. mehrfach angelegt werden.

LG

pah

Per

Aktuell bekomme ich noch nichtmal unter Python sinnvolle Werte, von FHEM bin ich also noch weit entfernt...

schlawiano

@Per

ZitatSind sie nicht, sie unterscheiden sich u.a. in der Auflösung (111x = 16 bit, 101x = 12 bit), das sollte aber zu beherrschen sein.
Das denke ich auch.

ZitatDas eine schließt das andere nicht aus. Erst definierst du einen Master und danach darauf basierend die Eingänge. Musst "nur" :D die Syntax anpassen und die define/set... dem entsprechenden Modul-Teil zuordnen.
Ich ahne, wo die Reise hingehen soll. Gibt es ein Beispiel Modul , wo das schon umgesetzt wurde ?

@pah

ZitatOverhead
Ja da gebe ich Ihnen recht. Zumindest seitens der Programmierung. Das sollte aber den Anwender nicht stören.
Ich habe mir mal angeschaut wie OWAD das handhabt. Die Idee mit den dynamischen Attributen ist gut.
Trotzdem gefällt mir meine Variante doch besser, was die Transparenz bei den Einstellungen betrifft (gerade was per Default eingestellt ist).
Ich weiß nicht, ob man OWAD pro Eingang auch Timer setzen kann. Das war mir eben wichtig.

In Summe, wenn ich darüber nachdenke, was es an Wünschen und der Forderungen gibt, wäre ein Neubau eines Moduls durchaus sinnvoll.
Da wären andere Entwickler gefragt. Zeitlich bin ich gerade sehr eingespannt.

Prof. Dr. Peter Henning

ZitatDas sollte aber den Anwender nicht stören

Aber doch, das genau ist der Kern ! Es ist (als FHEM-Installation) ziemlich unwartbar, für jeden Eingang eine eigene Modulinstanz mit defines etc. zu haben.

LG

pah

Joshibaer

So ich habe folgendes Problem.
Die aktuellen Module sind im FHEM Verzeichniss eingefügt und der unten stehenden Code befindet sich in der fhem.cfg.

define I2C_IO RPII2C 1
#IODev für I2C definieren

define myADS1115 I2C_ADS1115 0x48 # I2C-Adresse des ADS1115
attr myADS1115 IODev I2C_IO  # z.B. vom TYP RPII2C
attr myADS1115 verbose 5


define myADS1115_AI I2C_ADS1115_AI myADS1115
attr myADS1115_AI Threshold_Low_Voltage 1
attr myADS1115_AI interval 1 # in Minuten


Leider bekomme ich immer die Fehlermeldung

myADS1115: unknown IODev I2C_IO # z.B. vom TYP RPII2C specified myADS1115_AI: Wrong poll intervall defined. interval must be a number > 0

Das Gerät wird per i2cdetect 1 auf der Adresse 0x48 gefunden. Auf dem Buss befinden sich noch 4 Andere I2C Geräte , die problemlos funktionieren.

Was muss ich ändern , damit die Fehlermeldung nichtmehr erscheint ?

Danke im vorraus.

Joshibaer

Ok die Fehlermeldungen sind jetzt weg , aber ich bekomme leider noch keine Werte . Im STATE stehen immernoch  ???

B4unty

Ich habe mir ein ADS1115 zugelegt und möchte darüber Druck messen die Schaltung wollte ich wie im Anhang aufbauen nur ohne Display ist dieses dann das passende Modul für fhem?

Joshibaer

Von der Beschaltung her ist es richtig.
Ich habe leider den AD-Wandler nicht in FHEM einbinden können.
Der Umweg über den ESP8266 ist auch nicht zufriedenstellend.
Der Wert ist immer am schwanken und nicht stabile. Ich habe aber nochnicht die Fehlerquelle lokalisieren können.
Ich benutze den Gleichen Drucksensor wie auf dem Bild abgebildet.

B4unty

Ich habe so einen Sensor allerdings nicht als 200psi sondern 60psi muss ich den außer das Modul noch etwas installieren? Ich meine in der Anleitung die ich gefunden habe wird der ja ausgewertet ohne fhem.

B4unty

Ich habe mal eine frage jetzt mit volgendem pyton script kann ich mir den druck anzeigen lassen wie müsste ich das verändern bzw das modul anpassen um den druck in Fhem zu sehen?
import time

import Adafruit_ADS1x15
adc = Adafruit_ADS1x15.ADS1115(address=0x48, busnum=1)

# Gain = 2/3 for reading voltages from 0 to 6.144V.
# See table 3 in ADS1115 datasheet
GAIN = 2/3

# Main loop.
while 1:
    value = [0]
    # Read ADC channel 0
    value[0] = adc.read_adc(0, gain=GAIN)
    # Ratio of 15 bit value to max volts determines volts
    volts = value[0] / 32767.0 * 6.144
    # Tests shows linear relationship between psi & voltage:
    psi = 13 * volts - 5
    # Bar conversion
    bar = psi * 0.0689475729
   
    print("{0:0.3f}V [{1}]".format(volts, value[0]))
    print("\n{0:0.0f} psi {1:0.1f} bar".format(psi, bar))

für eure hilfe schon mal vorab besten dank

JoergS

Hallo,
Ich habe versucht, die ADS1115 Module zu verwenden.
Ich habe beide Module in /opt/fhem/FHEM kopiert und Nutzerrechte angepasst.
-rw-rw-rw-  1 fhem dialout  14580 Mai  1 12:19 52_I2C_ADS1115_AI.pm
-rw-rw-rw-  1 fhem dialout  21551 Mai  1 12:19 52_I2C_ADS1115.pm


Wenn ich die Funktion aus FHEM aufrufen will, kommt folgende Meldung
Cannot load module I2C_ADS1115

FHEM Log
2018.05.01 14:06:09 1 : reload: Error:Modul 52_I2C_ADS1115 deactivated: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./FHEM/52_I2C_ADS1115.pm line 172.
2018.05.01 14:06:09 0 : Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./FHEM/52_I2C_ADS1115.pm line 172.


Was mache ich falsch?
Danke and Gruß



setstate

Zitat von: schlawiano am 22 Juni 2016, 00:02:35
Generell gibt es 2 Module

I2C_ADS1115 ist die Steuerung des Sensors

Hier landen vom Eingang oder Eingängen die Befehle, diese werden der Reihe nach ausgeführt (Qeue)
Nur er schreibt und liest vom I2C-Bus

Daher muss er auch wie ein anderes I2C-Gerät definiert werden

define myADS1115 I2C_ADS1115 0x48 # I2C-Adresse des ADS1115
attr myADS1115 IODev raspBerryBus # z.B. vom TYP RPII2C
attr myADS1115 verbose 5



I2C_ADS1115_AI ist der Eingang bzw. Eingangsdifferenz


Per Define legt man des zugehörige Sensor - Modul fest.

z.B.
define myADS1115_AI I2C_ADS1115_AI myADS1115
attr myADS1115_AI Threshold_Low_Voltage 3
attr myADS1115_AI interval 5 # in Minuten



kleiner Tipp, um stundenlange Fehlersuche zu vermeiden:

der Kommentar: "z.B. vom TYP RPII2C" bedeutet:

man muss mit dem Attribute IODev ein vorhandenes FHEM I2C-Device angeben. Wenn man das noch nicht hat, muss es erst noch angelegt werden:

define I2C_Dev RPII2C 1

dann erst kann man es hier nutzen:

attr myADS1115 IODev I2C_Dev

rieders

Hallo

Ich kann das ads1115 Device nicht anlegen.
Ich bekomme diese Fehlermeldung Cannot load module I2C_ADS1115.

Die 2 Dateien habe ich in Fhem reingemacht.

Vielleicht kann mir jemand helfen


Grüße André

Gruby

#43
Hallo zusammen,

hier das gleiche Problem. Das fhem.log zeigt folgendes:

2018.10.03 14:21:34 1: reload: Error:Modul 52_I2C_ADS1115 deactivated:
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./FHEM/52_I2C_ADS1115.pm line 172.

2018.10.03 14:21:34 0: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./FHEM/52_I2C_ADS1115.pm line 172.

2018.10.03 14:35:13 1: PERL WARNING: Subroutine I2C_ADS1115_Initialize redefined at ./FHEM/52_I2C_ADS1115.pm line 110.
2018.10.03 14:35:13 1: PERL WARNING: Subroutine IC2_ADS1115_ReadValues redefined at ./FHEM/52_I2C_ADS1115.pm line 127.
2018.10.03 14:35:13 1: reload: Error:Modul 52_I2C_ADS1115 deactivated:
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./FHEM/52_I2C_ADS1115.pm line 172.

Hat jemand einen Tip was man dagegen machen kann?

Viele Grüße

Gruby

Adimarantis

#44
Zitat von: Gruby am 03 Oktober 2018, 14:46:44
Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at ./FHEM/52_I2C_ADS1115.pm line 172.

Hier muss wohl statt
if (!defined(%current))
besser
if (!keys %current)
geschrieben werden, da neuere Perl Versionen das anmeckern.

Nachdem der Code anscheinend schon länger nicht mehr gepflegt wird habe ich mit meinen eher bescheidenen PERL und FHEM Kenntnissen ein paar Anpassungen gemacht:
- Warnings behoben
- Zeichendreher in den Namen korrigiert
- PT1000 Temperaturmessung eingebaut

define myI2CDev RPII2C 1
define ADS1115 I2C_ADS1115 72
attr ADS1115 IODev myI2CDev
define pt1000 I2C_ADS1115_AI ADS1115
attr PT1000Factor 1000


Der PT1000Factor aktiviert meine Änderungen. Der PT1000 wird über einen Spannungsteiler angeschlossen. Der Sensor wird an GND und AIN angeschlossen und dann kommt ein 1K Widerstand zwischen AIN und 3.3V.
Da diese Schaltung sehr empfindlich auf kleinste Abweichungen des Widerstands reagiert, definiert man mit PT1000Factor den tatsächlichen Wert des Spannungsteilerwiderstands. Durch kleinere Anpassungen kann man dann auch noch kalibrieren.
In diesem Modus (PT1000Factor>0) stehen weitere Readings zur Verfügung. In state schreibe ich eine Zusammenfassung der Werte.
Readings
resistance     1090.2                   2018-12-25 12:44:21
state          T:23.1 R:1090.2 V:1.748  2018-12-25 12:44:21
temperature    23.1                     2018-12-25 12:44:21
voltage        1.748                    2018-12-25 12:44:21


Man könnte das Modul so auch zur generischen Widerstandsmessung einsetzen und die Temperaturangabe ignorieren.

Gruß
Jörg


Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

haufsolutions

#45
Moin zusammen,

beschäftige mich grade auch mit dem ADS1115.
Habe dieses schicke Teil für meinen Banana PI gekauft: http://sensorkit.joy-it.net/index.php?title=KY-053_Analog_Digital_Converter
Soweit scheint auch alles zu laufen. Versuche grade ein Helligkeitssensor ans laufen zu bekommen:
(https://www.banggood.com/5Pcs-Light-Sensor-Module-Light-Photosensitive-Sensor-Board-Light-Intensity-Sensor-Module-For-Arduino-p-1233690.html?cur_warehouse=CN)
Diese sind bestückt mit dem GL5528 & LM358

Bekomme aber noch keinen geeigneten Output.
Das Fehlerlog schmeißt zwischendurch auch: Communication error on send s. unten  :-\
Vll. weiß ja jem. Rat?

2019.02.07 15:09:09 5: [myADS1115] I2C_ADS1115_Current Anzahl = 1
2019.02.07 15:09:09 5: [myADS1115,LM358] I2C_ADS1115_Update
2019.02.07 15:09:09 5: myI2C: vom client empfangen|reg: 2|direction: i2cwrite|i2caddress: 72|data: 128 0
2019.02.07 15:09:09 5: myI2C: HWaccess I2CAddr: 0x48
2019.02.07 15:09:09 5: myI2C: vom client empfangen|reg: 2|direction: i2cwrite|i2caddress: 72|data: 128 0
2019.02.07 15:09:09 3: myI2C: HWaccess blockweise nach 0x48 schreiben, Reg: 0x02 Inh: 128 0, laenge: 3| -> syswrite failure: Communication error on send
2019.02.07 15:09:09 5: myI2C ->Client gefunden: myADS1115, I2Caddress: 72 Data: 128 0
2019.02.07 15:09:09 5: myI2C: vom client empfangen|reg: 3|data: 127 255|direction: i2cwrite|i2caddress: 72
2019.02.07 15:09:09 5: myI2C: HWaccess I2CAddr: 0x48
2019.02.07 15:09:09 5: myI2C: vom client empfangen|reg: 3|data: 127 255|direction: i2cwrite|i2caddress: 72
2019.02.07 15:09:09 3: myI2C: HWaccess blockweise nach 0x48 schreiben, Reg: 0x03 Inh: 127 255, laenge: 3| -> syswrite failure: Communication error on send
2019.02.07 15:09:09 5: myI2C ->Client gefunden: myADS1115, I2Caddress: 72 Data: 127 255
2019.02.07 15:09:09 5: [myADS1115,LM358] I2C_ADS1115_Update Threshold:0x8000 - 0x7FFF
2019.02.07 15:09:09 5: [myADS1115. LM358] I2C_ADS1115_ConfigWord Word: 0b1100001110011000
2019.02.07 15:09:09 5: myI2C: vom client empfangen|data: 195 152|i2caddress: 72|direction: i2cwrite|reg: 1
2019.02.07 15:09:09 5: myI2C: HWaccess I2CAddr: 0x48
2019.02.07 15:09:09 5: myI2C: vom client empfangen|data: 195 152|i2caddress: 72|direction: i2cwrite|reg: 1
2019.02.07 15:09:09 3: myI2C: HWaccess blockweise nach 0x48 schreiben, Reg: 0x01 Inh: 195 152, laenge: 3| -> syswrite failure: Communication error on send
2019.02.07 15:09:09 5: myI2C ->Client gefunden: myADS1115, I2Caddress: 72 Data: 195 152
2019.02.07 15:09:09 5: [myADS1115] I2C_ADS1115_Update, Call I2C_ADS1115_CheckSensorState
2019.02.07 15:09:09 5: myI2C: vom client empfangen|i2caddress: 72|direction: i2cread|type: checksensorstate|nbyte: 2|reg: 1
2019.02.07 15:09:09 5: myI2C: HWaccess I2CAddr: 0x48
2019.02.07 15:09:09 5: myI2C: vom client empfangen|i2caddress: 72|direction: i2cread|type: checksensorstate|nbyte: 2|reg: 1
2019.02.07 15:09:09 4: myI2C: HWaccess blockweise lesen setze Registerpointer auf 1
2019.02.07 15:09:09 3: myI2C: HWaccess blockweise von 0x48 lesen, Reg: 0x01 -> syswrite failure: Communication error on send
2019.02.07 15:09:09 5: myI2C ->Client gefunden: myADS1115, I2Caddress: 72

i2cdetect output:
i2cdetect -y 2
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --



klausw

Eventuell passen die Rechte für den fhem user nicht.
Was zeigt FHEM denn an wenn du
{`i2cdetect -y 2`}
im Eingabefeld eingibst?
Wenn nix kommt mal ins log schauen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

haufsolutions

Zitat von: klausw am 07 Februar 2019, 19:44:06
Eventuell passen die Rechte für den fhem user nicht.
Was zeigt FHEM denn an wenn du
{`i2cdetect -y 2`}
im Eingabefeld eingibst?
Wenn nix kommt mal ins log schauen.

Danke @klausw
Da waren wohl die Rechte Schuld habs nun angepasst, aber leider scheint er sich immer noch zu murren  ::)

2019.02.08 02:27:43 3: I2C_Dev: HWaccess blockweise nach 0x48 schreiben, Reg: 0x02 Inh: 128 0, laenge: 3| -> syswrite failure: Kommunikationsfehler beim Senden
2019.02.08 02:27:43 3: I2C_Dev: HWaccess blockweise nach 0x48 schreiben, Reg: 0x03 Inh: 127 255, laenge: 3| -> syswrite failure: Kommunikationsfehler beim Senden
2019.02.08 02:27:43 5: [myADS1115,LM358] I2C_ADS1115_Update Threshold:0x8000 - 0x7FFF
2019.02.08 02:27:43 5: [myADS1115. LM358] I2C_ADS1115_ConfigWord Word: 0b1100001110011000

2019.02.08 02:27:43 3: I2C_Dev: HWaccess blockweise nach 0x48 schreiben, Reg: 0x01 Inh: 195 152, laenge: 3| -> syswrite failure: Kommunikationsfehler beim Senden
2019.02.08 02:27:43 5: [myADS1115] I2C_ADS1115_Update, Call I2C_ADS1115_CheckSensorState
2019.02.08 02:27:44 3: I2C_Dev: HWaccess blockweise von 0x48 lesen, Reg: 0x01 -> syswrite failure: Kommunikationsfehler beim Senden

Die Ausgabe vom i2cdetect kommt nun in FHEM. Allerdings glaub ich das ich vll. noch ein paar Sachen am eig. zu messenden Device (LM358) einstellen muss?
Die aktuelle Config ist noch recht standard, sollte es da schon laufen?

Gruby

Hi zusammen;

hätte da noch einen Verbesserungsvorschlag  8)

Nach ersten Problemen mit den aktuellen 52_ads1115*.pm files in FHEM hatte ich mit den hier geposteten files umgehend Erfolg.
Nun bin ich am Finetuning und habe festgestellt dass es gut wäre wenn es z.B. ein Reading RAW-Voltage geben würde um dies dann mit einem Faktor multipliziert zu Voltage wird.

Hintergrund in meinem Fall ist dass, ich die Batteriespannungen meines Wohnmobils messe was einen Spannungsteiler bedarf.

Würde dies implementiert werden, wäre das um Längen komfortabler als sich mit eigenen Readings zu behelfen  ;D.

Viele Grüße und Danke für das Modul!

 

klausw

Zitat von: haufsolutions am 08 Februar 2019, 02:50:24
Danke @klausw
Da waren wohl die Rechte Schuld habs nun angepasst, aber leider scheint er sich immer noch zu murren  ::)

2019.02.08 02:27:43 3: I2C_Dev: HWaccess blockweise nach 0x48 schreiben, Reg: 0x02 Inh: 128 0, laenge: 3| -> syswrite failure: Kommunikationsfehler beim Senden
2019.02.08 02:27:43 3: I2C_Dev: HWaccess blockweise nach 0x48 schreiben, Reg: 0x03 Inh: 127 255, laenge: 3| -> syswrite failure: Kommunikationsfehler beim Senden
2019.02.08 02:27:43 5: [myADS1115,LM358] I2C_ADS1115_Update Threshold:0x8000 - 0x7FFF
2019.02.08 02:27:43 5: [myADS1115. LM358] I2C_ADS1115_ConfigWord Word: 0b1100001110011000

2019.02.08 02:27:43 3: I2C_Dev: HWaccess blockweise nach 0x48 schreiben, Reg: 0x01 Inh: 195 152, laenge: 3| -> syswrite failure: Kommunikationsfehler beim Senden
2019.02.08 02:27:43 5: [myADS1115] I2C_ADS1115_Update, Call I2C_ADS1115_CheckSensorState
2019.02.08 02:27:44 3: I2C_Dev: HWaccess blockweise von 0x48 lesen, Reg: 0x01 -> syswrite failure: Kommunikationsfehler beim Senden

Die Ausgabe vom i2cdetect kommt nun in FHEM. Allerdings glaub ich das ich vll. noch ein paar Sachen am eig. zu messenden Device (LM358) einstellen muss?
Die aktuelle Config ist noch recht standard, sollte es da schon laufen?

Zum AD Wandler selbst kann ich nix sagen, kenne weder Modul noch Wandler.
Die Botschaften kommen aber korrekt im I2C_Dev an.
Es hakt an der Schnittstelle zur Hardware.
Entweder die Rechte passen nich nicht richtig (neu gebootet?) oder die HW ist blockiert.
Kannst du das gleiche Datagramm mit i2cwrite senden?
Eine weitere SW greift nicht auf das IC zu?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

haufsolutions

Rechte passen soweit. Neu gebootet hab ich auch schon öfters seither.
Hab auch noch ein i2cget -y 2 0x48 in Fhem und auf der Console abgesetzt.
Beide Male kam 0x00 zurück.
Was genau müsst ich denn mit i2cwrite abschicken?

Adimarantis

Versuche es doch mal mit diesem kleinen C-Programm ob das Auslesen generell außerhalb von FHEM funktioniert.

Übersetzen mit
  gcc ads1115.c -o ads1115 -I . -L . -lm

Starten mit
./ads1115 <portnummer>

Wobei die Portnummer 0-3 ist - je nachdem an welchem Port des ADS1115 du etwas abgeschlossen hast.

Das C-Programm verwendet letztendlich die selbe Technik wie FHEM - wenn das geht, dann hast du einen Wurm in der FHEM Config

Gruß,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

haufsolutions

@Adimarantis

Danke für deine Hilfe  :)
Dann scheint es in FHEM wohl prinzipiell zu gehen da ich hiermit auch:
Write to register 1: Communication error on send
bekomme. Aber habe grade keine Idee was darauf zugreifen sollte  :o

Tanne-01

Hallo zusammen,
ich habe seit einigen Tagen den Baustein ADS1115 in fhem eingebunden, IOdev vereinbart, ADS1115 und ADS1115_A! definiert.

Die Adresse passt, Schreiben und lesen über Phyton funktioniert.
An den Eingängen A0-3 werden Spannungen von Batterien abgefragt. Die Kofiguration passt, Das Auslesen mit Phyton funktioniert ebenfalls.
Die Rechte für fhem sind ebenfalls korrekt vereinbart. Es tauchen keine readings auf.

Was muss ich in Fhem noch vereinbaren, damit ein Auslesen in fhem funktioniert?
Kann mir jemand helfen?

VG Frank

Prof. Dr. Peter Henning

ZitatPhyton
Ist das eine neue Sprache?  8)

LG

pah

Tanne-01

sorry, Buchstabensalat.... es sollte Python heißen.

kpl

Hallo Frank,
Sende doch mal ein list von deinen ADS1115 Device und einen ADS1115_AI Device.
Gruß,
Peter

Gruby

Hi zusammen,

hat jemand einen Tip wie man negative Rückgabewerte vom ADS1115 der direct am rPi hängt ignorieren/filtern kann?

Grüße

Gruby


kpl

Hallo Gruby,
ich mache dies mit einem userReading in dem ich auch den ausgelesenen Wert gleich in den tatsächlichen Strom umrechnen.
attr I_Wind userReadings current { my $v = (ReadingsVal($name,"voltage",2.49) - 2.4952) * 24;;$v = 0 if($v < 0);;$v}
Gruß,
Peter

cs-online

Hallo,

ich habe gerade diesen Thread entdeckt, ist es mit dem Modul vielleicht auch möglich, auf einem externen, über WLAN verbundenen RPI den ADS1115 anzuschließen und dann die Daten an FHEM auf einem anderen RPI zu bekommen ?

Grüße

Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

Per

Im Notfall kannst du ja mit FHEM2FHEM arbeiten, wobei das hier zwar mit Kanonen auf Spatzen... ist.
Aber irgendwie musst du die Daten ja von einem zum anderen Pi bekommen.

cs-online

ja, das ist wirklich ein wenig too much... Ich will das so einfach wie möglich halten....
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

TiPpFeHlEr

Hi,

wie bekomme ich alle 4 Analogen Eingänge ausgelesen?

definiert ist im Moment
defmod myADS1115 I2C_ADS1115 0x48
attr myADS1115 IODev myI2C
attr myADS1115 room I2C

&
defmod myADS1115_AI I2C_ADS1115_AI myADS1115
attr myADS1115_AI Auto_Read on
attr myADS1115_AI Operation_Mode Continuously
attr myADS1115_AI interval 5
attr myADS1115_AI room I2C
attr myADS1115_AI verbose 5

setstate myADS1115_AI 0.6
setstate myADS1115_AI 2020-04-13 10:11:39 state 0.6
setstate myADS1115_AI 2020-04-13 10:11:39 voltage 0.6


ich bekomme nur ein voltage reading

MfG Maik

thymjan

#63
Für jeden Eingang eine neue Instanz vom Typ "I2C_ADS1115_AI" mit konfiguriertem Multiplexer:

define i2c RPII2C 1
attr i2c room i2c
attr i2c stateFormat state: [$name:STATE]

define ADS1115 I2C_ADS1115 0x48
attr ADS1115 IODev i2c
attr ADS1115 room i2c
attr ADS1115 stateFormat [$name:MODUL_STATE]\

define ADC0 I2C_ADS1115_AI ADS1115
attr ADC0 Gain One
attr ADC0 Mux SINGLE_0
attr ADC0 interval 1
attr ADC0 room i2c
attr ADC0 round_Voltage_Decimal 5
attr ADC0 stateFormat U\
(\
[$name:voltage:t]\
)\
:\
[$name:voltage]\
V\
Mode: [$name:MUX]
attr ADC0 userReadings reading:voltage.* {ReadingsVal($name,"voltage",0)*204.6}

define ADC1 I2C_ADS1115_AI ADS1115
attr ADC1 Gain One
attr ADC1 Mux SINGLE_1
attr ADC1 interval 5
attr ADC1 room i2c
attr ADC1 round_Voltage_Decimal 5
attr ADC1 stateFormat U\
(\
[$name:voltage:t]\
)\
:\
[$name:voltage]\
V\
Mode: [$name:MUX]

define ADC2 I2C_ADS1115_AI ADS1115
attr ADC2 Gain One
attr ADC2 Mux SINGLE_2
attr ADC2 interval 5
attr ADC2 room i2c
attr ADC2 round_Voltage_Decimal 5
attr ADC2 stateFormat U\
(\
[$name:voltage:t]\
)\
:\
[$name:voltage]\
V\
Mode: [$name:MUX]

define ADC3 I2C_ADS1115_AI ADS1115
attr ADC3 Gain One
attr ADC3 Mux SINGLE_3
attr ADC3 interval 5
attr ADC3 room i2c
attr ADC3 round_Voltage_Decimal 5
attr ADC3 stateFormat U\
(\
[$name:voltage:t]\
)\
:\
[$name:voltage]\
V\
Mode: [$name:MUX]

Adimarantis

Um Interessenten an einem aktuellerem Modul für den ADS1115 einzusammeln: Ich habe hier ein neues Modul gepostet:
https://forum.fhem.de/index.php/topic,114632.msg1088622.html#msg1088622

Gruß,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)