Forum: Projekte & Code UVR 1611 (TA), Auswertung DL, Mega88, WinAVR


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Harald P. (haraldp)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Viele Solaranlagen verwenden den universellen Regler UVR1611 (inklusive 
Zubehör) von
Technische Alternative GmbH
Internet: http://www.ta.co.at
Auch der Braunschweiger Solaranlagenhersteller SOLVIS verwendet diese 
Komponenten (zumindest bei mir).
Der Regler besitzt eine zweipolige Datenleitung DL, auf der zyklisch 
etwa 1/s alle wichtigen internen Analog-und Digitalwerte ausgegeben 
werden.
Mit einer zweiadrigen Leitung kann das Signal zu einer entfernten Stelle 
weitergeleitet und dann dekodiert angezeigt werden.
Durch den großen Pegelhub und den relativ langsamen Signalwechseln ist 
das Signal recht störunempfindlich.
Die Dekodierung kann recht einfach mit einem AVR durchgeführt werden.
Die SW soll mehr ein Beispiel dafür sein, wie die Signale dekodiert und 
angezeigt werden können. Wegen der recht unterschiedlichen 
Einsatzmöglichkeiten des Reglers, sind Änderungen und Anpassungen 
notwendig.
Harald

von Jochen R. (josch90)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald, habe mich nun mal daran gemacht deinen Code zu verstehen, 
da ich allerdings noch nicht ganz so fit in C bin kam ich recht schnell 
ins Straucheln...
Deshalb hier ein Paar fragen:

Welche verwendung hat der EEProm in deiner Programmierung?
Sehe ich dass richtig dass du das Signal mit UART auswertest, weil du 
diese initialisiert hast? Aber das Protokoll des UVR ist doch etwas 
anderst aufgebaut?!

Vielleicht schaff ich es ja deinen Code etwas mehr zu verstehen wenn du 
mir die Fragen beantwortest.

Danke schonmal

Gruß

Jochen

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Das DL-Signal wird nur an PD2 (=INT0) geführt und dann per Interrupt 
ausgewertet. Der UART wird bei mir nur für Testzwecke benutzt. Man 
braucht ihn also eigentlich nicht.
Zum Einlesen benötigt man nur die ISR-Routinen (ohne UART) und die 
DL-Struktur mit ein paar Hilfsbytes.
Die Sprache C ist eigentlich auch nicht mein Favorit (vgl. 
http://www.henning-thielemann.de/CHater.html), aber die einzige 
vernünftige Alternative dazu (beim AVR) wäre Assembler. Für einfache 
uP-Aufgaben kann man jedoch auch mit C arbeiten. Immerhin gibt es viele 
Tutorials im Netz. Zumindest halte ich ein C-Programm für verständlicher 
als ein ASM-Programm.
Wenn es helfen sollte, könnte ich das Programm mal so abspecken, daß nur 
die Auswerteroutinen übrig bleiben. Was man dann mit den empfangenen 
Daten macht, bleibt jedem selbst überlassen.

Harald

von Jochen R. (josch90)


Bewertung
0 lesenswert
nicht lesenswert
Harald P. wrote:

> Wenn es helfen sollte, könnte ich das Programm mal so abspecken, daß nur
> die Auswerteroutinen übrig bleiben. Was man dann mit den empfangenen
> Daten macht, bleibt jedem selbst überlassen.

Dafür wäre ich dir echt dankbar, dann könnte ich es mit einer 
UART-Routine verknüpfen, dass dürfte ich mit meinen jetzigen 
C-kenntnissen noch schaffen.

Gruß

von Harald P. (haraldp)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier die abgespeckte Version. Die Daten werden nur eingelesen und stehen 
dann im RAM.

Harald

von matthias-riedel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Haraldp

kannst du mir den aufbau des DL signals irgenwie zukommen lassen?
Ich habe schon mehrfach danch gesucht, aber nie was gefunden.

Matthias

von matthias-riedel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sorry,

haette gleich deine ZIP anschauen sollen

Matthias

von C. R. (jolly71)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch eine UVR1611 und interessieren sich für das Projekt 
haraldp
haraldp oder kann jemand schicken Sie das Muster, um es zu machen?
Vielen Dank an alle

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Hallo C.R.,
leider habe ich die Frage/Problem nicht verstanden. Um was geht es?
Harald

von C. R. (jolly71)


Bewertung
0 lesenswert
nicht lesenswert
sorry aber ich benutze die automatischen Übersetzer zu schreiben.
wenn möglich, ich brauche Schema elektronischen Leiterplatten und Ihrer 
avr88 Board mit LCD zu mir selbst zu bauen.
Dank

von Harald P. (haraldp)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch einige zusätzliche Infos zu meiner UVR1611-Erweiterung
Harald

von Holger Götze (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

vielen Dank für die Anleitung!

So könnte man doch auch zusätzliche Sensorwerte in den Bus einspeisen, 
oder?

MfG
Holger

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Holger,
ich war im Urlaub, so daß ich erst jetzt mir die Forenbeiträge 
angeschaut habe. Die Frage habe ich nicht verstanden. Welche Sensorwerte 
solllten in den Bus dazugepackt werden und von wem?
So wie ich das verstanden habe, kann man die Zuordnung der Signale auf 
den DL-Bus nicht ändern. Aber vielleicht doch. Vielleicht weiß da jemand 
mehr.

Harald

von Bene (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi Allerseits,
un hoffe einen guten Urlaub gehabt zu haben :)

Das Thema ist spannend und ich auf einem ähnlichem Weg.
Das Auslesen des DL mit nem AVR ist schon eine nette Lösung.
Zum Schreiben auf dem DL hab ich noch nichts gefunden, bin aber am 
sammeln inwiefern über den CAN-Bus direkt das umsetzbar wird.

Als Verarbeiter dann ein AVR und CAN-Transceiver und dann sollte es 
gehen.
Den vorhandenen UVR spielt man vor, man sei ein oder mehrere I/O-Module 
und baut sie entsprechend auch in seiner Regelung ein.

Ich werde wohl nicht den AVR nehmen sondern direkt einen Kleinstrechner 
(Beaglebone), so kann ich gleich den Home-Automation-Server mit 
Webinterface mitlaufen lassen. Falls mir das mißlingt, wirds AVR und nen 
UART. (ist auch günstiger).

Aber noch ist nichts am laufen, daher bin ich gespannt auf Ideen.
Habt ihr eine Protokollbeschreibung für den CAN-Bus von TA bekommen?

Besten Gruß
Bene

von Harald P. (haraldp)


Bewertung
1 lesenswert
nicht lesenswert
Ja, über CAN kann man auch auf die UVR1611 zugreifen. Das habe ich auch 
getestet, dann aber wieder aufgegeben.
Testaufbau:
- CAN Transceiver MCP2551
- 2 schnelle Optokoppler zur Entkopplung Rx,Tx (könnte auch entfallen)
- CAN Controller MCP2515
- ATMega88
dazu ein Terminalprogramm, das den CAN-Controller bedient.
Grundsätzlich hat es funktioniert. Variable etc. ließen sich auslesen. 
Setzen haben ich nicht probiert. Insgesamt bin ich mit dem CAN-Bus 
schlecht klargekommen.
TA hat mir zwar 2 Dokumente dazu geschickt, aber ohne tiefe 
CAN-Kenntnisse kann man wohl nicht allzuviel damit anfangen. CSDO, SSDO 
usw. blieben mehr oder weniger böhmische Dörfer für mich.
Durch allzu rigides Auslesen von CAN-Nachrichten habe ich die UVR zum 
Absturz gebracht. Aber glücklicherweise war alles reversibel.
Also, kein echter Erfolg. Mir reicht der DL-Bus.
Harald

von Jo A. (jo0)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

... TA hat mir zwar 2 Dokumente dazu geschickt, aber ohne tiefe
CAN-Kenntnisse kann man wohl nicht allzuviel damit anfangen...

Kannst du diese 2 Dokumente bitte mal zur Verfügung stellen ?
Bin auch an diesem Thema interessiert.

Gruß Jo

von Karsten (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ein Super Beitrag das Auslesen über DL-Bus.

Bei mir steht die Aufgabe einen Festbrennstoff-Kessel über einen MODBUS 
anzubinden. Als MODBUS wird RS-485 als physische Schnittstelle 
verwendet. Nun benötige ich ein Gateway von MOD-Bus zu CAN-BUS oder von 
MOD-BUS zu DL.

Hat jemand soetwas schon gemacht?

Viele Grüße

Karsten

von Meinolf L. (meilu)


Bewertung
0 lesenswert
nicht lesenswert
hallo
habt ihr euch schonmal gedanken demacht den DL-Bus an einen Raspberry zu 
bringen ?


meilu

von HaraldP (Gast)


Bewertung
0 lesenswert
nicht lesenswert
meinolf lutter schrieb:
> hallo
> habt ihr euch schonmal gedanken demacht den DL-Bus an einen Raspberry zu
> bringen ?

Könnte evtl. funktionieren, da die Signalwechsel nicht allzu häufig 
sind. Besser ist jedoch eine Art Gateway mit AVR. So habe ich das 
gemacht:
HW: AtMega16; ENC28j60
SW: gesagtes DL-Pgm; DL-Daten werden per Udp-Broadcast gesendet.
Jeder Ethernet-Teilnehmer (auch RPi) kann dann diese Daten empfangen und 
auswerten.

Harald

von Olli (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

das was Du da gemacht hast ist ziemlich genau das, was ich auch suche.
Ich hab' den NET-IO von Pollin und versuche dem genau das beizubringen.

Ich denke Dein Ansatz wäre ein Interessantes Projekt hier. Meinst Du, Du 
könntest da was zur Verfügung stellen?

Gruß,
Olli

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Olli schrieb:
> Ich denke Dein Ansatz wäre ein Interessantes Projekt hier. Meinst Du, Du
> könntest da was zur Verfügung stellen?
>
> Gruß,
> Olli

Na ja, in meinem Programm stecken noch viele weitere Details:
 - Mittelwertbildung
 - Gaszählerauslesung
 - Rolladensteuerung
 - (ungenutzte) SD-Kartenansteuerung
 - zusätzliche RS485-Schnittstelle
 - ...

Mit dem kompletten Programm könnte keiner außer mir etwas anfangen. Die 
SW-Bausteine für das oben genannte Ziel sind doch eigentlich alle da:
 - DL-Bus auslesen
 - 64Byte Daten zusammenstellen
 - per Udp senden

Harald

von S. K. (skg)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Ich habe ein einfacheres Model von TA, die UVR-31, die bei mir seit 1996 
läuft und den gleichen Bus verwendet erfolgreich an den Raspberry B+ 
angebunden (PIGPIO Bibliothek für den GPIO Zugriff mit Python). Die 
CPU-Last am Raspberry liegt für den PIGPIOD Daemon und das Python 
Programm bei ca. 10-15%. Das Protokoll nutzt den Manchester Code. Daher 
wird auch die UVR-1611 problemlos funktionieren.

Die Pegelanpassung erfolgt mittels einiger weniger Komponenten (ein 
CNY17 Optokoppler mit Diodenschutzschaltung und zwei Widerstände), 
Kosten weniger als 1€ (Siehe beiliegende Simulation der Schaltung mit 
LTSpice IV).

Das Ganze kostet deutlich weniger als D-LOGG (aber viel mehr Zeit ;-) ).

skg

: Bearbeitet durch User
von meilu (Gast)


Bewertung
0 lesenswert
nicht lesenswert
hallo harald,
hast du von deiner anzeige ein schaltplan oder platinenlayout ?
habe versucht das dl signal mit dem arduino zu dekodieren.
klappt nur sporadisch. ich nehme an das der avr durch das arduino
zu stark ausgebremst wird.

meinolf ( dl6dbh)

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
meilu schrieb:
> hast du von deiner anzeige ein schaltplan oder platinenlayout ?

Es gibt bei nur Lochrasterplatinen mit Fädeldraht (0.2mm CuL aus alten 
Trafos). Ein - zugegebenermaßen - rudimentären Schaltplan findest du in 
der Anlage

Harald P. schrieb:
> Autor:
>
>       Datum: 03.08.2010 17:29

Viel ist da nicht zu verschalten: Ein Eingang am AVR für das DL und 6 
Ausgänge für ein LCD. Das Ganze habe ich inzwischen 4x realisiert in 
unterschiedlichen Umgebungen. Kritisch ist da nichts. Auch ein 
vorgeschaltetet Optokoppler darf durchaus CNY17 o.ä. sein.

Harald

von Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

könnt Ihr mir das Layout für das Auslesen einer ESR zukommen lassen?
Können die Daten auch in FHEM übernommen werden?

Hintergeund ist, dass ich über einen RPI und FHEM die Heizungsdaten 
aufnehme, aber leider die Daten der Solaranlage nicht einlesen kann, da 
das eine ESR31 von TA ist.
Mein Plan wäre noch, die Heizung automatisch abzuschalten, wenn Wärme 
von Solar anliegt.

Gruß
Jens

von Robert W. (rwalli)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

Welche Änderungen müsste ich an der abgespeckten Version vornehmen damit 
sie auf einem atmega328 läuft?

Robert

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Robert Walli schrieb:
> Welche Änderungen müsste ich an der abgespeckten Version vornehmen damit
> sie auf einem atmega328 läuft?

Gar keine, Mega328 hat (fast) diesselbe Architektur wie der Mega88. 
Gerade ausprobiert: Programm kompiliert mit M328p als Target.
Ergänzen mußt du, was du mit den eingelesenen DL-Daten machst. Aber das 
dürfte dir wohl klar sein.

Harald

von Robert W. (rwalli)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

Danke für Deine Antwort!

Ich probier das ganze gerade zum Laufen zu bringen und
versuche mir grad das Wissen dazu anzueignen.
Ich habe bislang die timer nur mit den Arduino-Libraries konfiguriert 
und tu mich ziemlich schwer ohne diese:(

Ich hab den praescaler für timer0 auf 1024 umgestellt und die OCR0A's 
angepasst aber leider ohne Erfolg.
Die 16 Syncbits werden Erkannt, dann aber passt was mit den timings 
nicht.

Hab ich da was falsch verstanden?
Du schreibst ja dass Du den atmega88 mit 8MHz betreibst.
Mein 328 läuft ja mit 16Mhz, da passen ja die ganzen Timings nicht...


Robert

: Bearbeitet durch User
von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Robert Walli schrieb im Beitrag
>
> Hab ich da was falsch verstanden?
> Du schreibst ja dass Du den atmega88 mit 8MHz betreibst.
> Mein 328 läuft ja mit 16Mhz, da passen ja die ganzen Timings nicht...
>
> Robert

Umrechnen der Timerwerte ist natürlich notwendig. Anhand der 
Datenblätter dürfte das recht einfach sein.

von Robert W. (rwalli)


Bewertung
0 lesenswert
nicht lesenswert
Harald P. schrieb:

> Umrechnen der Timerwerte ist natürlich notwendig. Anhand der
> Datenblätter dürfte das recht einfach sein.

Hab ich da einen Denkfehler?
Der 328 läuft doppelt so schnell, somit hab ich den Timer2 gleich 
gelassen und OCR2A von 78 auf 156 gestellt.

Der Timer0 würde bei 255 überlaufen, daher hab ich ihn von 1:256 auf 
1:1024 gestellt:
(TCCR2B = (1 << CS22) | (1 << CS21) | (1 << CS20)).

Anschliessend habe ich alle OCR0A halbiert und "TCNT0 > 80" auf "TCNT0 > 
40" gestellt.

(Timer0 ist mit 1/4 der Geschwindigkeit konfiguriert und der 328er 
taktet doppelt so schnell -> timer0 läuft mit der 1/2 Geschwindigkeit).

Ich bekommen dann als ersten Byte immer 0x30 (es sollten 0x90 sein).
Die Restlichen hab ich nicht kontrolliert.


Hab ich da irgendwas vergessen?

Robert

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Robert Walli schrieb:
> Hab ich da einen Denkfehler?
> Der 328 läuft doppelt so schnell, somit hab ich den Timer2 gleich
> gelassen und OCR2A von 78 auf 156 gestellt.

Ja, Denkfehler.
Wenn der m328 doppelt so schnell läuft, dann verdoppeln sich auch die 
Zählerwerte.
Für die Dekodierung von DL braucht man hier nur den Timer0. Also bei 
16MHz gilt:
 if (TCNT0>160 || TIFR0 ) // 2048us
dann 2x
 OCR0A = 95; // 1536us
und dann
 OCR0A = 127; // 2048us, für Bits1..8 wirksam
Die Werte habe ich hier korrigiert, da ich ursprünglich vergessen hatte, 
daß die resultierende Frequenz bei CTC (f/OCR0A+1) ist. Aber so kritisch 
ist das Ganze nicht.
Den Timer2 verwende ich nur zur Ausfalloffenbarung. Wenn länger als 5s 
keine gültige Daten kommen, gilt das als Ausfall. Da gibt es 1000 
weitere Methoden das zu machen.
Die Initialisierung von Timer0 kann so bleiben, also Vorteiler 1:256.

Harald

: Bearbeitet durch User
von Robert W. (rwalli)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

Danke nochmals für deine Hilfe!

Harald P. schrieb:
> Wenn der m328 doppelt so schnell läuft, dann verdoppeln sich auch die
> Zählerwerte.

Ja schon, aber ich habe - wie im vorigen post geschrieben - den 
prescaler auf 1:1024 gestellt, da der 8Bit Timer ja nicht bist 512 
kommt.
Dh. der Timer müsste 1/2 so schnell laufen, oder?

Ich glaube da ist wo anders der Wurm drinnen.
Ich hab mal länger (500 - 1000) Zyklen gewartet und dann ist folgendes 
gekommen:

11111111111111111110111111101001
11111111111111111110111100110000
11111111111111111110111101010110
11111111111111111110111101000000
11111111111111111110111101101110
11111111111111111110100010000000

anschliessend wieder 100 Zyklen nichts und dann wieder ein Wert.

Ich hab in Deinem Code beim "// mach was mit den Daten"  für 6 Werte 
(i=0-6):
Serial.println(DLWerte.t.Temp[i],BIN);
geschrieben.
Warum kommen da 32-Bit?
Ich bin ratlos:(

Robert

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Robert,
jetzt kommen wir wohl nur mit kompletten Code und Schaltplan weiter.

von Robert W. (rwalli)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

Danke für deine Geduld.
Hier mal der Code und Schaltplan.

Ich hab jetzt Deinen Orginalcode hergenommen und nur die 3 
Timer-änderungen von Deinem Post angepasst.
Ich hab den UVR-61-3, hab aber den 65Byte-Datensatz vorerst drinnen 
gelassen.
Zum Testen müsste es reichen.

Jedoch ändert das auch nichts:

Ich bekommen jedoch immer den output wie im Anhang:
     0x90 0x48 0xAA...
Richtig wäere:
     0x90 0x6F 0xAA...

Mir fehlen die Ideen.

Robert

PS: Einen Screenshot eines Logic Analyzer hab ich auch noch angehängt...

: Bearbeitet durch User
von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Was mir sofort auffällt, ist, daß das DL-Signal bei dir nichtinvertiert 
ankommt. Bei mir sitzt noch ein Optokoppler dazwischen,der für eine 
Invertierung sorgt.

von Robert W. (rwalli)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald!

Ich könnte mir in den A. beissen.
Ich habe einen Optokoppler gefunden und das ausprobiert:
Funktionierte auf Anhieb!

Das Gute an der Sache: ich habe viel über Timer gelernt und ich habe
auch den Timingfehler im Logic Analyzer gefunden. (Stolz)
Nur leider die Ursache nicht ;)

Danke nochmals!

Robert

von schwedenfan (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich möchte den Volumenstromsensor HUBA FTS4-50DL von
Technische Alternative GmbH
mit einem ATMEGA auslesen. Weiß jemand, wie der Befehl auszusehen
hat, um diesen Sensor auszulesen?

Gruß
Wolfram

von Programmierer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
schwedenfan schrieb:
> Hallo,
>
> Ich möchte den Volumenstromsensor HUBA FTS4-50DL von
> Technische Alternative GmbH
> mit einem ATMEGA auslesen. Weiß jemand, wie der Befehl auszusehen
> hat, um diesen Sensor auszulesen?
>
> Gruß
> Wolfram

get FTS4-50DL(int Durchfluss);

von Meinolf L. (meilu)


Bewertung
0 lesenswert
nicht lesenswert
hallo
ich habe ein arduino -> canbus-shield
im terminal kann ich jetzt daten des canbus mitlesen
kann die werte aber nicht reproduzieren.
hat sich da schonmal einer versucht ?

gruß mmeilu

von johannes mainusch (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

Danke für Dein DLanz.zip. Ich habe damit meine Heizungsanlage debuggt. 
Da Du nicht so einfach im Netz zu finden bist als haraldp Dank auf 
diesem Weg.

https://www.ahojsenn.com/2016/03/06/debuggen-den-käfer-im-relais-finden/
http://krukas.dyn.amicdns.de/~pi/heizung-pi/heizung.html


Johannes

von Ingo K. (ingo_k938)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ähnliches Thema aber UVR64 als Steuerung.

Ich möchte die Daten von der Datenleitung (DL) gerne mittels ESP8266 an 
meine Heimautomatisierung weiterleiten (ioBroker) und dort 
visualisieren.

Kann mir bitte jemand helfen und sagen wie die Verkabelung zwischen 
DL-Leitung und ESP sein muss?

Wie bekomme ich die Daten dann weiter? Auf meinem ESP8266 läuft ESPEasy.

Danke Ingo

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Das DL-Signal der UVR64 müßte sich auch mit meinem Programm dekodieren 
lassen. Allerdings ist die Nachricht kürzer, siehe 
Schnittstellenbeschreibung in der ursprünglichen zip-Datei.
Ob der ESP8266 das kann, weiß ich nicht; vermutlich geht es. ESPEasy 
kenne ich nicht, wahrscheinlich wird es erst mit einer Erweiterung 
funktionieren. Das Problem beim ESP ist, daß er im Hintergrund die 
WLAN-Funktionen bearbeitet, so daß evtl. nicht sichergestellt ist, ob 
die Timing-Bedingungen eingehalten werden können.
Ich würde einen ATMEGA spendieren, der als Grundgerüst mein Programm 
enthält, und dann die empfangenen UVR-Daten seriell an einen ESP 
ausgeben und von dort aus weiter über WLAN. Oder ein ENC28J60-Modul an 
den ATMEGA anschließen und dann die Information als UDP an das Netzwerk 
übergeben. Die Erweiterung zur Ansteuerung des ENC ist relativ einfach. 
Beispiele hierfür findet man hier im Forum.
Harald

von Ingo K. (ingo_k938)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

vielen Dank für deine prompte Antwort.
Ich würde es im ersten Schritt mal mit einem ESP8266 versuchen.

Muss ich bei der Verkabelung etwas beachten?
Oder einfach die DL Leitung an einen Pin (welchen?) am ESP?
Oder müssen irgendwelche Wiederstände dazwischen weil in der 
Schnittstellenbeschreibung steht, das die Ausgangsschaltung der 
Datenleitung 24V beträgt?


Wäre schön wenn du mir nochmal helfen würdest.

Herzlichen Dank, und viele Grüße,
Ingo

von Harald P. (haraldp)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Ingo,

Das DL Signal wird bei mir über einen Optokoppler (SFH610, Vorwiderstand 
6.8K vor LED, Kollektor an PORTD2, Emitter an Masse) an INT0 geführt. 
Welcher ESP-Eingang interruptgesteuert werden kann, weiß ich nicht. Wie 
willst du den ESP programmieren? Als Arduino (wäre wohl am einfachsten, 
aber funktioniert evtl. nicht wegen Timing) oder mit dem SDK?
Da die Zeiten relativ lang sind, könnte möglicherweise auch ein Polling 
funktionieren. Das müßtest du selbst programmieren.
Harald

von Ingo K. (ingo_k938)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Harald,

hättest du evtl. eine kleine Skizze zwecks Aufbau und Verkabelung für 
mich?
Ich bin da nicht ganz so firm.

Zwecks Datentransport sehe ich kein Problem, das erledigt ESPEasy (die 
Firmware auf dem ESP) für mich. Die Daten selbst kann ich dann mit einem 
Script im ioBroker auseinandernehmen.

Mir geht es primär um den Aufbau bzw. Zusammenschluss der Komponenten 
inkl. Widerständen etc. Da kenne ich mich leider nicht ganz so gut aus.

Grüße Ingo

von Harald P. (haraldp)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier eine Skizze.

von Manni (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie würde man vorgehen, wenn man eigene Temperaturwerte auf den Bus 
schreiben will? Ich würde hier gerne einen AVR als DS18B20/DL Bus 
Gateway nutzen und den DL Bus Koppler/Sensoreingang emulieren (um 
möglichst viele Werte übergeben zu können, das wären 24 bei dem). Darf 
man einfach so auf den Bus schreiben oder gibt es einen master der das 
ganze aufteilt? Wie sieht's mit Kollisionserkennung aus? Hat irgendwer 
da schon mal eine Schaltung für getestet?

Liebe Grüße

von Hannes (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin so eben sehr erfreut auf den Tread gestorben zu sein.

Ich besitze eine Solarfous UVR42 Solarsteuerung welche eine Datenleitung 
zum Ausgeben der Temperaturwerte hat. 
https://www.ta.co.at/fileadmin/Downloads/Betriebsanleitungen/00_Altgeraete/uvr42e2_4.pdf

Mittels Multimeter konnte ich eine Pegel von 9-19V AC messen.

Hierbei wird eine UVS 232 (es sollte auch D-LOGG gehen) benötigt.

Meine Überlegung war, die Temperaturwerte der Solaranlage über die 
Datenleitung auszulesen und diese mittels eines ESP8266 über MQTT an 
mein Openhab zu senden.

Gibt es hierfür schon Erfahrung bzw könnte mir jemand dabei helfen.

Die Schaltung mittels Optokoppler konnte ich schon den Beiträgen 
entnehmen. Muss diese dann an den RX Pin angeschlossen werden, oder darf 
hier jede beliebige Datenleitung genutzt werden?

Wenn das funktionieren würde wäre das MEGA :)

von Hannes D. (Firma: test) (trainer)


Bewertung
0 lesenswert
nicht lesenswert
Ingo K. schrieb:
> Hallo Harald,
>
> hättest du evtl. eine kleine Skizze zwecks Aufbau und Verkabelung für
> mich?
> Ich bin da nicht ganz so firm.
>
> Zwecks Datentransport sehe ich kein Problem, das erledigt ESPEasy (die
> Firmware auf dem ESP) für mich. Die Daten selbst kann ich dann mit einem
> Script im ioBroker auseinandernehmen.
>
> Mir geht es primär um den Aufbau bzw. Zusammenschluss der Komponenten
> inkl. Widerständen etc. Da kenne ich mich leider nicht ganz so gut aus.
>
> Grüße Ingo

Hallo,

hat die Kommunikation und das Auswerten der Temperaturwerte mittels 
ESP8266 funktioniert?

von Uli S. (uli007)


Bewertung
0 lesenswert
nicht lesenswert
Schau dir das mal an.
https://github.com/martinkropf/UVR31_RF24

ich habe mir das vor 4 Jahren für meinen UVR64 umgebaut und die Daten 
dann via RS232 an einen Raspi weitergeleitet. Auf dem Raspi habe ich 
dann zwei Programme die diese Daten auf den MQTT Broker, welche auch auf 
dem Raspi läuft, weitergeben. Ist mehr ein Hack, aber läuft jetzt schon 
ein paar Jahre.

Das Arduino Programm von Martin Kropf kannst du ja auf den 8266 portiern 
und um die MQTT Funktion/Ausgabe erweitern.
Zur Frage mit dem Optokoppler, den hängt du auf einen "normalen" 
Eingang, denn das TA-Protokoll hat mit einer RS232 Kommunikations nichts 
zu tun.

von Hannes D. (Firma: test) (trainer)


Bewertung
0 lesenswert
nicht lesenswert
Uli S. schrieb:
> Schau dir das mal an.
> https://github.com/martinkropf/UVR31_RF24
>
> ich habe mir das vor 4 Jahren für meinen UVR64 umgebaut und die Daten
> dann via RS232 an einen Raspi weitergeleitet. Auf dem Raspi habe ich
> dann zwei Programme die diese Daten auf den MQTT Broker, welche auch auf
> dem Raspi läuft, weitergeben. Ist mehr ein Hack, aber läuft jetzt schon
> ein paar Jahre.
>
> Das Arduino Programm von Martin Kropf kannst du ja auf den 8266 portiern
> und um die MQTT Funktion/Ausgabe erweitern.
> Zur Frage mit dem Optokoppler, den hängt du auf einen "normalen"
> Eingang, denn das TA-Protokoll hat mit einer RS232 Kommunikations nichts
> zu tun.

Wow, vielen Dank.

Du hast also, wie von "S. K." gepostet, eine Optokoppler für die 
Kommunikation genutzt und diesen an den RX Port des RPI angeschlossen?
Ich hätte einen PC817 herumliegen, könnte ich den auch nutzen?

Auf dem RPI läuft somit dein python Skript welches die Daten an den MQTT 
Broker schickt?
https://github.com/martinkropf/UVR31_RF24/blob/master/Receiver/recv.py

Falls es doch nicht das im Link befindliche Python Skript handelt würde 
ich dich um deine genutzten Programme bitten.

Super, ich werde versuchen die Files im Ordner "UVR31_RF24" auf meinen 
ESP8266 zu laden.

von Uli S. (uli007)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe einen Arduino Nano zwischengeschalten. Dieser nimmt die Daten 
über einen SFH618A auf. Dein PC817 sollte auch passen.
Ich verwende ein, ein wenig modifiziertes ino Porgramm (also C) auf dem 
Arduino. Dieses sendet die empfangenen Daten dann über den RS232/USB 
Anschluss des Arduino Nanos an den Raspi (UBS-Anschluss).

Das kann man eleganter mit dem 8266 machen und über WLAN direkt an den 
MQTT-Raspi weitersenden.
Vielleicht mache ich das einmal, wenn ich Lust und Zeit habe. Aber dann 
muss ich auch den Keller mit WLAN ausrüsten

ich habe diesen Teil als Ausgangsbasis verwendet
https://github.com/martinkropf/UVR31_RF24/tree/master/UVR31_RF24

: Bearbeitet durch User
von Hannes D. (Firma: test) (trainer)


Bewertung
-1 lesenswert
nicht lesenswert
Uli S. schrieb:
> Ich habe einen Arduino Nano zwischengeschalten. Dieser nimmt die Daten
> über einen SFH618A auf. Dein PC817 sollte auch passen.
> Ich verwende ein, ein wenig modifiziertes ino Porgramm (also C) auf dem
> Arduino. Dieses sendet die empfangenen Daten dann über den RS232/USB
> Anschluss des Arduino Nanos an den Raspi (UBS-Anschluss).
>
> Das kann man eleganter mit dem 8266 machen und über WLAN direkt an den
> MQTT-Raspi weitersenden.
> Vielleicht mache ich das einmal, wenn ich Lust und Zeit habe. Aber dann
> muss ich auch den Keller mit WLAN ausrüsten
>
> ich habe diesen Teil als Ausgangsbasis verwendet
> https://github.com/martinkropf/UVR31_RF24/tree/master/UVR31_RF24

Deine Lösung klingt sehr spannend.

Nachdem mein RPI2 nicht in der nähe des Kellers ist würde ich es über 
WLAN und MQTT nutzen.

Leider bin ich kein Experte im Programmieren und bräuchte eine Kleien 
Hilfe.

Ich habe das Main File schon angepasst für die MQTT Kommunikation:
/*  
 ~~~~~~~~~~
 UVR31_RF24
 ~~~~~~~~~~
 Martin Kropf 2015 
 
 UVR31_RF24.ino:
 Phase change between receiving and processing
 
 */


// If DEBUG is defined all dump commands (dump.h/dump.ino) are compiled and 
// output occurs via Serial. If DEBUG is commented out, the web upload 
// (web.h/web.ino) is compiled and used instead. Both at once doesn't work
// (on the Leonardo) because the RAM storage is too small.

//#define DEBUG

// if USINGPC is defined, output is displayed on the Serial Monitor.
// Should be turned on if the Arduino is used on the PC,
// as soon as it is used with own power supply, you should comment it out.

//#define USINGPC

// adjust these values to your needs, for that remove the comments /*  */ (the values in the comments are examples)

#define MQTTDEF

const byte dataPin = 2; // pin with data stream
 // interrupt for data pin, see:
// http://arduino.cc/en/Reference/AttachInterrupt
const byte interrupt = 0;

//---------MQTT Test------
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
 
const char* SSID = "xxxxxxxx";
const char* PSK = "xxxxxxxx";
const char* MQTT_BROKER = "192.168.2.108";
 
WiFiClient espClient;
PubSubClient client(espClient);



// ======================

#include <SPI.h>

#include "receive.h"
#include "process.h"
#include "dump.h"
#include "NRF24.h"

void setup() {
#ifdef USINGPC
  Serial.begin(115200);
#endif
  // in DEBUG mode output via serial, otherwise web upload (see above)
#ifdef DEBUG
  Serial.println("Press key for detailed output.");
#else
  NRF24::start();  
#endif
  Receive::start();

#ifdef MQTTDEF
    Serial.begin(115200);
    setup_wifi();
    client.setServer(MQTT_BROKER, 1883);
#endif
}

void setup_wifi() {
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(SSID);
 
    WiFi.begin(SSID, PSK);
 
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
 
    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

void reconnect() {
    while (!client.connected()) {
        Serial.print("Reconnecting...");
        if (!client.connect("ESP8266Client")) {
            Serial.print("failed, rc=");
            Serial.print(client.state());
            Serial.println(" retrying in 5 seconds");
            delay(5000);
        }
    }
}

void loop() {
  if (!Receive::receiving) {
    Process::start();  // process data
    Receive::start(); // receive data    
  }
#ifdef MQTTDEF
  if (!client.connected()) {
        reconnect();
    }
    client.loop();
#endif

#ifdef DEBUG
  if (Serial.available()) {
    while (Serial.available())
      Serial.read(); 
    if (Dump::active)
      Serial.println("\nDetails deactivated.");
    else
      Serial.println("\nDetails activated.");
    Dump::active = !Dump::active;
  }
#endif
}

welche Daten müsste ich jetzt mittels
client.publish("Temperaturwerte der Solaranlage/Puffer/Speicher");
 übertragen?
Leider konnte ich die Variable, welche zu senden wäre, noch nicht 
herauslesen :(

Ich wäre einer kleinen Hilfe deiner Seite sehr dankbar :)

von Jan H. (j_hansen)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ohne mir diesen Thread durchgelesen zu haben - ich habe auf meinen ESP32 
(das Programm selbst ist eigentlich für den ESP8266) folgendes Programm 
geladen: https://github.com/Buster01/UVR2MQTT

Spannungsteiler für den DL-Bus dran und fertig - lief sofort problemlos 
und tut es immer noch. Und genau das willst du doch, oder? DL-Bus => 
ESP8266 => MQTT wenn ich es richtig verstanden habe.

von Hannes D. (Firma: test) (trainer)


Bewertung
0 lesenswert
nicht lesenswert
Jan H. schrieb:
> Hallo,
>
> Ohne mir diesen Thread durchgelesen zu haben - ich habe auf meinen ESP32
> (das Programm selbst ist eigentlich für den ESP8266) folgendes Programm
> geladen: https://github.com/Buster01/UVR2MQTT
>
> Spannungsteiler für den DL-Bus dran und fertig - lief sofort problemlos
> und tut es immer noch. Und genau das willst du doch, oder? DL-Bus =>
> ESP8266 => MQTT wenn ich es richtig verstanden habe.

Super, vielen Dank.

Genau so etwas habe ich gesucht.

Nutzt du die Software für eine UVR1611 Anlage?
Ich habe die UVR42 und hierfür müsste man noch die Zeiten (Dauer eines 
Bits, Zeitraum eines Datenrahmens) anpassen?

Ich habe die Software auf meinen ESP gespielt uns versucht mittels 
Seriellen Monitor die Serial.println anzeigen zu lassen, jedoch 
erscheint nur ?????. Ich habe die Baudrate auch richtig eingestellt 
115200, woran könnte es noch liegen?

von Hannes D. (Firma: test) (trainer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe die Schaltung mit einem cny17-4 probiert jedoch bleibt die 
Ausgangsspannung bei 3,3v.

Welche Eingangsspannung hat der UVR42 damit ich den Spannungsteiler mit 
auf eine 3,3v Ausgangsspannung berechnen kann?

von Uli S. (uli007)


Bewertung
0 lesenswert
nicht lesenswert
Du hast schon den DL-Bus des UVR42 an die Diode (über R) des 
Optokopplers gehängt? Der Phototransistor hängt dann am ESP.

von Hannes D. (Firma: test) (trainer)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe wie im Bild ersichtlich die Verkabelung durchgeführt.

Wurde hier die richtige Masse gewählt?
Sind die Widerstände von mir korrekt gewählt?
Ich habe eine Eingangsspannung mit 12V angenommen und zum Teil gemessen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.