Liebe Bascommer,
ich möchte meine bivalente Heizung automatisieren. An der (selbst hinzugefügten) Wärmepumpe (WP) wurden dafür vorsorglich 4 Stück DS18B20 Sensoren verbaut und zwar für Vorlauf, Rücklauf, Außentemperatur und Verdampfertemperatur (letzterer um ggf. einer automatischen Enteisung zuvorzukommen).
Weil die WP selbst keine vernünftigen Sensoren hat und ich schnell die Effizienz des Geräts prüfen wollte, habe ich einen Shelly Uni verbaut, der die vier 18B20 Sensoren ausliest. Das macht er trotz laaanger Leitungen so gut (und "funkt" die Werte dann auch noch schick ins Inet), dass ich diesen Shelly eigentlich nicht mehr missen möchte.
Womit "füttere" ich nun aber meinen Atmega328, der die Heizungssteuerung erledigen (und einen S0 Zähler auslesen und und und) soll? Die Sensoren sind mit drei Drähten, also "mit normaler Spannungsversorgung" und nicht "parasite power" angeschlossen. Drei Möglichkeiten hatte ich mir überlegt, wie ich die gleichen 4 Sensoren für beide boards verwenden kann:
a) ich nutze einen Multiplexer für die gemeinsame Sensorleitung DQ. Hierzu muß ich den Datenverkehr auf der DQ-Line "beobachten" und wenn zB 10ms lang "Funkstille" herrscht den Multiplexer umschalten und "nur" die Befehle
1wreset
1wwrite &H55 'Befehl "Match ROM" (bestimmten Sensor adressieren/auswählen)
For I = 1 To 8
1wwrite Dsid1(i) '64bit bzw. 8byte lange ID-Nummer übermitteln
Next I
1wwrite &HBE 'Befehl "Read Scratchpad" (Speicher auslesen)
Rom1 = 1wread(1)
nacheinander auf alle vier Sensoren anwenden (auch Dsid2, Dsid3, Dsid4 usw). Wenn ich fertig bin, schalte ich den Multiplexer wieder zurück und der Shelly darf sich "bedienen".
b) ich "schneide den Datenverkehr mit": der Shelly macht ja schon alles das, was es zum Auslesen braucht. Dafür wäre kein Multiplexer nötig. Ich muss "einfach nur" mitbekommen, welcher Sensor gerade angesprochen wird und seine Antwort dann entsprechend "mitlesen".
c) Ich habe die Sensoren (die gemeinsame DQ-Leitung) nur am Atmega angteschlossen. Dieser liest die Sensoren aus und ist aber ebenfalls auf einer anderen "soft 1-Wire Leitung" mit dem Shelly verbunden. Wenn der Shelly dann die vermeintlichen Sensoren abfragt, dann muß sich der Atmega exakt so verhalten, als wäre er vier Sensoren und die zuvor gemessenen Daten "brav" weiterreichen.
a) würde ich mir mit meinen Kenntnissen am ehesten zutrauen. Zig Sensoren parasitär und "normal" auslesen habe ich schon oft gemacht und es klappt recht zufriedenstellend, wenn nicht gerade große Störer in Leitungsnähe sind. Es setzt allerdings voraus, daß die "Lücken" zwischen den Messungen des Shelly auch wirklich lang genug sind. Das weiß ich noch nicht, habe aber ein gutes Gefühl
b) finde ich am reizvollsten/edelsten. Traue es mir aber nicht zu, da ich zB nicht wüßte, wie ich die Daten aus dem "Verkehr herausziehe", OHNE dass ich selbst den Startschuss für die Datenübertagung gegeben habe. Selbst wenn ich es schaffen sollte, den Befehl "1wwrite &HBE" (der ja sicher auch vom Shelly kommt) zu detektieren, dann hätte ich immer noch Schiss, dass ich entweder das Timing nicht hinbekomme und mir totalen Mist in den Speicher "ziehe" ODER aber (noch wahrscheinlicher), dass sich der Befehl 1wread mit dem entsprechenden Befehl des Shelly, der ja dann zur gleichen Zeit ausgeführt wird, beißt. Und das Ganze "zu Fuß" zu programmieren, d.h. auf die Bascom Befehle zu verzichten und "nachzubauen", kriege ich wahrscheinlich nicht mal ansatzweise hin.
c) würde sich vmtl umsetzen lassen, finde ich aber am schlechtesten. Einerseits werde ich Probleme haben, die Sensoren "nachzuspielen" und auf die Anfragen des Shelly richtig zu antworten. Andererseits hat der Shelly ganz bestimmt eine gute Prozedur, um unvermeidlich auftretende Fehler "zu parieren". Ich kenne das von meinen eigenen Schaltungen: je länger die Leitung und je mehr Störungen, desto aufwendiger wird der Code, um die Sensoren nochmal und nochmal auszulesen, bestimmte wiederkehrende Bitmuster komplett auszuschließen und andere Plausibilitätschecks zu machen. Alles das müßte ich nun selbst machen, damit der Shelly nicht alle Nase lang mit schlechten Werten versorgt wird und die Tagesdiagramme dann ganz fürcherlich aussehen (jetzt sehen sie super aus!)
Was meint ihr? welche der Varianten würdet ihr wählen bzw. habt sogar schon einmal so ein Problem gelöst?
Und ja, man könnte auch den Shelly rausschmeißen und ... aber siehe oben: der funktioniert für das, was er macht, eigentlich sehr gut. Jedenfalls sehe ich keinen richtigen Grund, um zB serielle Daten von einem Atmega an einen ESP8266 zu senden, damit der diese dann ins Netz stellt. Denn dann wären die Daten noch lange nicht in der Cloud und in schönen Diagrammen, die ich mir überall auf dem Handy anschauen kann ...
Anders herum will ich auch keinen ESP8266 für meine Heizungssteuerung verwenden. Er hätte mindestens zu wenig Pins UUUUND - er läßt sich (noch?) nicht mit Bascom programmieren.
Kleine Nebenfrage: was haltet ihr von dieser DS3231 Realtime Clock? Brauchbar oder Mist? Wird die Batterie 8 Monate "ohne Vcc" aushalten oder ist die dafür nicht dimensioniert? Es gibt ja auch Module mit 2032 Zellen (Batterien oder Akkus) drauf. Die haben aber meist noch einen EEProm mit drauf, den ich nicht verwenden würde. Trotzdem besser aus eurer Erfahrung heraus? DCF77 Module funktionieren in meinem Keller leider nicht, ansonsten hätte ich viel lieber ein solches verwendet.
ich möchte meine bivalente Heizung automatisieren. An der (selbst hinzugefügten) Wärmepumpe (WP) wurden dafür vorsorglich 4 Stück DS18B20 Sensoren verbaut und zwar für Vorlauf, Rücklauf, Außentemperatur und Verdampfertemperatur (letzterer um ggf. einer automatischen Enteisung zuvorzukommen).
Weil die WP selbst keine vernünftigen Sensoren hat und ich schnell die Effizienz des Geräts prüfen wollte, habe ich einen Shelly Uni verbaut, der die vier 18B20 Sensoren ausliest. Das macht er trotz laaanger Leitungen so gut (und "funkt" die Werte dann auch noch schick ins Inet), dass ich diesen Shelly eigentlich nicht mehr missen möchte.
Womit "füttere" ich nun aber meinen Atmega328, der die Heizungssteuerung erledigen (und einen S0 Zähler auslesen und und und) soll? Die Sensoren sind mit drei Drähten, also "mit normaler Spannungsversorgung" und nicht "parasite power" angeschlossen. Drei Möglichkeiten hatte ich mir überlegt, wie ich die gleichen 4 Sensoren für beide boards verwenden kann:
a) ich nutze einen Multiplexer für die gemeinsame Sensorleitung DQ. Hierzu muß ich den Datenverkehr auf der DQ-Line "beobachten" und wenn zB 10ms lang "Funkstille" herrscht den Multiplexer umschalten und "nur" die Befehle
1wreset
1wwrite &H55 'Befehl "Match ROM" (bestimmten Sensor adressieren/auswählen)
For I = 1 To 8
1wwrite Dsid1(i) '64bit bzw. 8byte lange ID-Nummer übermitteln
Next I
1wwrite &HBE 'Befehl "Read Scratchpad" (Speicher auslesen)
Rom1 = 1wread(1)
nacheinander auf alle vier Sensoren anwenden (auch Dsid2, Dsid3, Dsid4 usw). Wenn ich fertig bin, schalte ich den Multiplexer wieder zurück und der Shelly darf sich "bedienen".
b) ich "schneide den Datenverkehr mit": der Shelly macht ja schon alles das, was es zum Auslesen braucht. Dafür wäre kein Multiplexer nötig. Ich muss "einfach nur" mitbekommen, welcher Sensor gerade angesprochen wird und seine Antwort dann entsprechend "mitlesen".
c) Ich habe die Sensoren (die gemeinsame DQ-Leitung) nur am Atmega angteschlossen. Dieser liest die Sensoren aus und ist aber ebenfalls auf einer anderen "soft 1-Wire Leitung" mit dem Shelly verbunden. Wenn der Shelly dann die vermeintlichen Sensoren abfragt, dann muß sich der Atmega exakt so verhalten, als wäre er vier Sensoren und die zuvor gemessenen Daten "brav" weiterreichen.
a) würde ich mir mit meinen Kenntnissen am ehesten zutrauen. Zig Sensoren parasitär und "normal" auslesen habe ich schon oft gemacht und es klappt recht zufriedenstellend, wenn nicht gerade große Störer in Leitungsnähe sind. Es setzt allerdings voraus, daß die "Lücken" zwischen den Messungen des Shelly auch wirklich lang genug sind. Das weiß ich noch nicht, habe aber ein gutes Gefühl

b) finde ich am reizvollsten/edelsten. Traue es mir aber nicht zu, da ich zB nicht wüßte, wie ich die Daten aus dem "Verkehr herausziehe", OHNE dass ich selbst den Startschuss für die Datenübertagung gegeben habe. Selbst wenn ich es schaffen sollte, den Befehl "1wwrite &HBE" (der ja sicher auch vom Shelly kommt) zu detektieren, dann hätte ich immer noch Schiss, dass ich entweder das Timing nicht hinbekomme und mir totalen Mist in den Speicher "ziehe" ODER aber (noch wahrscheinlicher), dass sich der Befehl 1wread mit dem entsprechenden Befehl des Shelly, der ja dann zur gleichen Zeit ausgeführt wird, beißt. Und das Ganze "zu Fuß" zu programmieren, d.h. auf die Bascom Befehle zu verzichten und "nachzubauen", kriege ich wahrscheinlich nicht mal ansatzweise hin.
c) würde sich vmtl umsetzen lassen, finde ich aber am schlechtesten. Einerseits werde ich Probleme haben, die Sensoren "nachzuspielen" und auf die Anfragen des Shelly richtig zu antworten. Andererseits hat der Shelly ganz bestimmt eine gute Prozedur, um unvermeidlich auftretende Fehler "zu parieren". Ich kenne das von meinen eigenen Schaltungen: je länger die Leitung und je mehr Störungen, desto aufwendiger wird der Code, um die Sensoren nochmal und nochmal auszulesen, bestimmte wiederkehrende Bitmuster komplett auszuschließen und andere Plausibilitätschecks zu machen. Alles das müßte ich nun selbst machen, damit der Shelly nicht alle Nase lang mit schlechten Werten versorgt wird und die Tagesdiagramme dann ganz fürcherlich aussehen (jetzt sehen sie super aus!)
Was meint ihr? welche der Varianten würdet ihr wählen bzw. habt sogar schon einmal so ein Problem gelöst?
Und ja, man könnte auch den Shelly rausschmeißen und ... aber siehe oben: der funktioniert für das, was er macht, eigentlich sehr gut. Jedenfalls sehe ich keinen richtigen Grund, um zB serielle Daten von einem Atmega an einen ESP8266 zu senden, damit der diese dann ins Netz stellt. Denn dann wären die Daten noch lange nicht in der Cloud und in schönen Diagrammen, die ich mir überall auf dem Handy anschauen kann ...
Anders herum will ich auch keinen ESP8266 für meine Heizungssteuerung verwenden. Er hätte mindestens zu wenig Pins UUUUND - er läßt sich (noch?) nicht mit Bascom programmieren.
Kleine Nebenfrage: was haltet ihr von dieser DS3231 Realtime Clock? Brauchbar oder Mist? Wird die Batterie 8 Monate "ohne Vcc" aushalten oder ist die dafür nicht dimensioniert? Es gibt ja auch Module mit 2032 Zellen (Batterien oder Akkus) drauf. Die haben aber meist noch einen EEProm mit drauf, den ich nicht verwenden würde. Trotzdem besser aus eurer Erfahrung heraus? DCF77 Module funktionieren in meinem Keller leider nicht, ansonsten hätte ich viel lieber ein solches verwendet.