Forum: PC-Programmierung LON Bus Windhager mitlesen/steuern


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 Peter M. (peter2003)


Lesenswert?

Hallo,

da ich seit einem gutem Jahr einen Heizkessel von Windhager habe
(VarioWin, UML+, WVF+ und InfoWin+), habe ich mich auch schon längere
Zeit bemüht, eine Möglichkeit zu finden, diverse Werte über den LON Bus
auszulesen (Status, Temperaturen, Pellets Verbrauch, ...).

Beim Suchen ist mir dann die Service SW von Windhager über den Weg
gelaufen.
In der beiliegenden Doku ist der verwendete USB-LON Adapter zu sehen.
Den habe ich mir besorgt, und jetzt kann ich die Anlage "auslesen" (es
werden alle vorhandenen Module gesucht/gefunden, und die NV ausgelesen),
und könnte FW Updates durchführen.
Vom VarioWin kann man auch ein paar Parameter auslesen und am PC
speichern bzw.  zurück schreiben (für Baugruppentausch).

Damit habe ich mal ein schönes (funktionierendes) Beispiel, was sich so
am LON abspielt.

Im Prinzip möchte ich auch genau so was machen, aus den Modulen diverse
NV auslesen.

Ich habe schon mit einem USB-Analyser und diversen PDF von Echelon auf
der USB Schnittstelle zwischen Treiber und LON Adapter mitgelesen, und
kann die Nachrichten einigermaßen interpretieren.

Auch habe ich versucht mit dem Echelon Paket „OpenLDV SDK“ und der darin
enthaltenen ldv32.dll (ist laut Adapterhersteller kompatibel mit der HW)
mit Visual Basic die Verbindung zu öffnen. Laut der „C“ Beispiele sollte
das ja ganz einfach sein, bekomme aber immer den Fehler „invalid
Parameter“ beim Aufruf der Open Funktion in der ldv32.dll zurück.
Ich habe schon alle möglichen Varianten der Funktionsdeklaration in VB
versucht, aber ohne Erfolg.

Ein anderer Weg wäre, die beiden DLL die mit dem Service Toll
mitgekommen sind zu verwenden. Aber dafür habe ich ja gar keine
Beschreibung. Müsste man mühsam mit einem Debugger raus finden, was da
passiert.

Wer Interesse hat an näheren Informationen, oder helfen kann, ist
herzlich willkommen.

Lg. Peter

von Rainer (Gast)


Lesenswert?

Hi,

ich bin auch schon seit einiger Zeit an einer Anbindung der Heizung an 
meine Haussteuerung interessiert. Leider ist Windhager da etwas träge.

Ich selbst habe einen Firewin mit UML und WVF (nicht die Plus-Version). 
Es gibt seit 2 Wochen eine Möglichkeit von Windhager die Heizung über 
das Smartphone zu steuern, jedoch ist der Preis für die Lösung einfach 
zu hoch, davon mal abgesehen dass die Steuerung über einen 
Windhager-Server (Cloud) läuft.

Mir wäre es deshalb auch lieber, das ganze über den LON-Bus zu steuern 
bzw. mitzulesen. Kannst du mir mal die Unterlagen zukommen lassen, die 
du dazu gefunden hast?

von Rainer (Gast)


Lesenswert?

email ist:

rainer<punkt>mueller@gmx<punkt>at

von Peter M. (peter2003)


Lesenswert?

Also inzwischen bin ich ja schon viel weiter, als meine letzte Nachricht 
vermuten lässt.

Ich bin zwar mit der OpenLDV Bibliothek von Echelon soweit gekommen, 
dass ich den XLON-USB Adapter (http://www.xlon.de/index.htm) öffnen 
kann, aber eine Kommunikation mit UML/WVF/VarioWIN ist mir nicht 
gelungen.
Scheinbar ist der Adapter doch nicht kompatibel, wie angegeben, und 
leider auch nicht ganz billig.

Somit habe ich dann "einfach" die Service SW von Windhager analysiert,
und mit einem VB2005 Programm nachgeahmt, mithilfe der mitgelieferten 
DLLs.

Mein Progi kann jetzt alle Komponenten (UML, WVF, Kessel) selber finden, 
die darin enthaltenen NV (Variablen) abfragen, und deren Werte auslesen.

Weiters habe ich eine Trace Funktion, wo ich zyklisch in einer Datei 
hinterlegte NV abfrage, und speichere.

Zuz. bin ich am spielen (mit dem Kessel), um die Bedeutung der einzelnen 
NV zu erforschen.
Nicht alle sind durch den Namen selbsterklärend.

Wer es mit einem anderen Adapter versuchen möchte, oder ganz ohne, der 
kann auch nähere Informationen haben, was so am Lon Bus nötig ist, um 
die Komponenten anzusprechen.

von Peter M. (peter2003)


Angehängte Dateien:

Lesenswert?

So, ich bin jetzt einigermaßen fertig mit diesem Projekt.
Die interessantesten Parameter werden jetzt periodisch aus dem Kessel 
ausgelesen, und in eine Datei gespeichert.
Diese Datei (bzw. deren Inhalt) wird dann über eine .ASP Datei auf einem 
Webserver bereitgestellt (siege Bild), und kann mit jedem Browser 
aufgerufen werden.

von Christian (Gast)


Lesenswert?

Hallo,
schön das sich da auch andre mit beschäftigen atte vor ca. 5 Jahren auch 
mal ein versuch gestartet scheiterte aber an den Protokollen bzw konnte 
ich den Bus nicht richtig lesen. Ich wäre für infos zu der Abrage des 
Uml sehr interessiert gern per mail.

von Peter M. (peter2003)


Lesenswert?

Hallo  Christian (Gast),

was für Infos würdest du denn genau brauchen?
Um sie dir per Mail zu senden, musst du mir deine Adresse zukommen 
lassen.

von Jürgen R. (juergenle)


Lesenswert?

Hallo Peter M.
Ich habe auch eine Windhager-Pelletheizung. Ich bin im Moment daran den 
Datenverkehr auf dem LON Bus zu analysieren. Schwere Aufgabe !
Hast du da Unterlagen zum Telegrammaufbau, zum datenverkehr etc ?
Mfg Juergen R.

von David M. (amd6409)


Lesenswert?

Hallo Peter M.,

ich habe einen Windhager HMX Holzvergaserkessel, also den Vorgänger der 
derzeitigen Modellpalette von Windhager.
Hast du Informationen ob deine Lösung auch bei diesem Kessel 
funktionieren würde?
Er nutzt intern auch schon LON um Zusatzmodule an den Kessel anzubinden.
Wäre sehr Interessiert den Status, Temperaturen,… auszulesen, um diese 
dann in meiner Heizungsregelung, Visu zu integrieren.

Vielen Dank!

von Peter M. (peter2003)


Lesenswert?

Hallo David,

möglicherweise kann das original Service Tool auch mit HMX 
Holzvergaserkessel kommunizieren.
Im Unterordner wo die Symbolbilder liegen, die angezeigt werden, wenn 
eine Komponente beim einlesen der Anlage gefunden wurde, ist ein Bild 
HMX.jpg.

Allerdings sind in den Ordnern, wo die FW der einzelnen Komponenten 
liegt, die vom Service Tool aktualisiert werden können, nur BioWin, 
VarioWin und FireWin Anlagen.

Man müsste das halt testen, aber dazu braucht man den Xlon-USB Adapter.

Peter

von Martin Rechberger (Gast)


Lesenswert?

Hallo Peter,

darf ich fragen wie du zu dem "Technikermodul" gekommen bist? Mir wurde 
gesagt, dass das nicht verkauft wird.

lg
Martin

von Peter M. (peter2003)


Lesenswert?

An Privatpersonen wird leider nicht geliefert.
Ich habe den Adapter über die Firma eines Bekannten bestellt.

von Jürgen V. (jrgen_v)


Lesenswert?

Woher kann ich die Service SW bekommen?
Modul mit rs232 Schnittstelle ist schon da :)

: Bearbeitet durch User
von Peter M. (peter2003)


Lesenswert?

Hallo Jürgen,

wo du die SW findest, habe ich dir per Email gesendet.

Aber du wirst den oben erwähnten XLON USB Adapter brauchen, was anderes 
funktioniert mit der Service SW nicht.

Peter

von Dominic M. (Gast)


Lesenswert?

Hallo Peter,
könntest du mir eine Mail zukommen lassen, wo ich die Software finde.

Danke und Gruss Dominic

sgtdodo81@gmail.com

von Angel C. (Gast)


Lesenswert?

Hi, Im trying to interact with a windhager variowin with mes module and 
fb5210 thermostat from an open domotic platform in raspberry, someone 
can confirm me what interface could communicate with the bus, im looking 
that cheapest option is u60 from échelon and appear to be compatible 
with same drivers and software than u10/u20. Could someone indicate me 
if im investigating in the correct way? Thanks!

von Gerhard E (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
bin soeben auf diesen Thread gestoßen.
Ich habe seit 2006 einen Vitolig 200, der eigentlich ein HMX von 
Windhager ist. Hatte auch bisher nach Vitolig gesucht, dachte nicht an 
die Suche nach HMX.
Vor drei Jahren habe ich erfolglos versucht, die Daten aus dem Kessel 
auszulesen. Dazu habe ich einen LON-Bus PCMCIA-Adapter besorgt, bin aber 
wohl an der Softwareumgebung gescheitert. Ich wusste nichts von einem 
Service-Tool.
Ich habe mir inzwischen mit einem Beckhoff-System (Analoge 
Eingangsklemmen und Ethernet-Buskoppler) beholfen und ein zweites dünnes 
Thermoelement in die Brennkammertauchhülse geschoben, ebenso im Abgas. 
Die Tank- und sonstigen Wassertemperaturen messe ich mit PT100-Fühlern. 
Dazu in Labview einen Recorder geschrieben, um den Verlauf der 
Verbrennung über der Zeit zu beobachten (ein Schritt ca. 3 sek.).
Seit 2 Jahren habe ich zusätzlich noch eine Lambda-Sonde im Abgasstrang 
installiert. Dabei habe ich feststellen müssen, dass der Kessel von Zeit 
zu Zeit in einen Zustand verfällt, der durch starken Luftmangel 
gekennzeichnet ist. Normalerweise pendelt der Kessel zwischen Lambda = 
1,05 und 1,2. Dann aber stimmt plötzlich das Luftverhältnis nicht mehr 
und es kommt zu Phasen mit Lambda kleiner 0,7, ggf. auch mit Qualmen. 
Das passiert bevorzugt bei Lastwechseln (wenn die Rücklauftemperatur 
ansteigt).

Ich würde die Sache gerne nochmal mit der Abfrage der Daten aus dem 
Kessel selbst angehen. Besteht die Möglichkeit, mir für einen erneuten 
Anlauf am LON-Bus unter die Arme zu greifen?

Grüße
Gerhard

von Peter M. (peter2003)


Lesenswert?

Hallo Gerhard,

kannst du "unter die Arme zu greifen" näher erläutern?

Die Service SW dient ja "nur" zum aktualisieren der FW der diversen 
Teile.
Im Verzeichnis der FW sind folgende Komponenten zu sehen:

AB-Modul
BioWIN
BioWIN2
BioWINXL
B-PLM +
FireWIN
InfoWIN
InfoWIN BW
InfoWIN FW
InfoWIN SW
JetWIN
KAS +
LogWIN
LWP
PMX
SilvaWIN
SOFU
UML +
VarioWIN
WVF +
ZSP-O2

Da ist kein HMX dabei.

Das bedeutet nicht, dass man mit dem XLON-USB (den die Service SW 
verwendet) nicht auch mit einem HMX kommunizieren kann.
Aber für die Kommunikation werden diverse Informationen gebraucht.
Die kann man für die Komponenten, die in der Service SW vorhanden sind, 
aus deren FW Ordner gewinnen.
Da dort kein HMX vorhanden ist, ist das nicht so einfach.

Und nur zum testen ist der XLON-USB etwas teuer.

Was für einen LON-Bus PCMCIA-Adapter hast du denn?

Peter

von Gerhard E (Gast)


Lesenswert?

Hallo Peter,

vielen Dank für die schnelle Antwort.
Da die letzten Aktivitäten mit dem LON-Bus bereits mehrere Jahre her 
sind muss ich das Interface erst mal suchen. Ich glaube mich zu 
erinnern, dass es ein Interface von Echellon war. Inzwischen ist die HW 
irgendwo in meinem Bastelkeller nach hinten gewandert, ich werde am 
Wochenende mal versuchen das Kärtchen aufzutreiben, dann werde ich mich 
wieder mit genaueren Informationen melden.

Bis dahin eine angenehme Woche
Gerhard

von Horst V. (Gast)


Lesenswert?

Hallo Peter,

wir haben seit letzem Herbst auch eine Windhager Pellet-Heizung 
(BioWin2). Ich möchte nun auch diverse Werte aus der Anlage auslesen und 
ein wenig STatistik damit betreiben. Infos über den LON-Bus habe ich 
schon im Netz gefunden. Das Protokoll ist zwar prinzipiell verständlich, 
aber selber einen protokoll-Stack zu programmieren erscheint mir recht 
mühsam.

In einem Deiner ersten Posts schreibst Du:

> Wer es mit einem anderen Adapter versuchen möchte, oder ganz ohne, der
kann auch nähere Informationen haben, was so am Lon Bus nötig ist, um
die Komponenten anzusprechen.

Da ich beabsichtige, mit einer eigenen Interface-Hardware in Verbindung 
einem RasperryPi zu arbeiten, bin ich dringend auf Insider-Wissen des 
Protokolls und der Datenformate bei der Kesselsteuerung angewiesen.

Über eine Reaktion würde ich mich sehr freuen!

Grüße
Horst

von Peter M. (peter2003)


Lesenswert?

Hallo Horst,

ohne LON Stack glaube ich nicht das es gehen wird. Entweder mit einem 
Adapter (zB. so wie den XLON-USB, wo man dann eine DLL mit den 
Funktionen anspricht, oder einen von Echelon, der mit deren DLL bedient 
werden kann), oder alles selber programmieren, was sehr aufwendig ist, 
wie du schon angemerkt hast.

"Nur" mit passivem mitlesen am Bus wirst du nicht weiterkommen. Die 
gesuchten Informationen werden in Netzvariablen gespeichert/übertragen.
Die sind aber nur nach "Aufforderung" am Bus vorhanden, somit muss man 
am Bus "mitreden". Und dazu wirst du den LON Stack brauchen.

Die Informationen die ich liefern kann, beziehen sich auf die LON 
Kommandos, die nötig sind, um die am Bus vorhandenen Komponenten 
(Kessel, UML, WVF, InfoWin) zu finden, und deren Eigenschaften (wie die 
Netzvariablen, Knotenadressen, ...) auszulesen. Mit diesen Werten kann 
dann gezielt ein/mehr Werte aus einem Knoten ausgelesen werden.

Die Informationen liegen in Form von Mitleseprotokollen vor, die ich an 
der USB Schnittstelle zwischen PC und XLON-USB gewonnen habe.
Da sieht man mit welchen Befehlen die Knoten gesucht und ausgelesen 
werden.

Was aber bei der DLL ein ganz einfacher Funktionsaufruf ist (Open, 
Reset, Write CMD, Close, ...), sind an der USB Schnittstelle schon 
einige Befehle mehr (Handshake mit Quittungen, ...), und was genau 
direkt am LON Bus passiert, kann ich dir gar nicht genau sagen (zB. die 
Kollisionserkennung, wann ist der Bus frei, damit geschrieben werden 
kann, ...).
Ich habe mir den Bus zwar auch mit dem Oszilloskop angesehen, aber mehr 
als die physikalischen Bedingungen (wie Spannung, Übertragungsrate) ist 
da nicht zu erfahren.

lg. Peter

von Horst V. (hoschti)


Lesenswert?

Hallo Peter,

vielen Dank für Deine ausführliche Antwort. Ich hatte etwas in der Form 
leider schon erwartet. Eigentlich möchte ich ja ohne teure Spezial-Teile 
auskommen. Und da ich auch kein Freund von Windows bin (ich nutze 
auschließlich Linux), kann ich auch mit einem Tool, dass auf DLLs setzt 
nicht richtig was anfangen. Mir wird also nichts anderes übrig bleiben, 
als den Protokoll-Stack irgendwie nachzubauen. Das ist ja prinzipiell 
nicht unmöglich, aber bisher ist mir noch keine halbwegs verständliche 
Beschreibung über den Weg gelaufen. Bis auf die Bit-Kodierung 
(Manchester) habe ich noch nichts gefunden. Ist Dir vielleicht bei 
Deinen Recherchen irgendwas in der Art aufgefallen? Ich bin da für jeden 
Himweis (Link) dankbar.

Grüße
Horst

von Peter M. (peter2003)


Lesenswert?

Sende mir deine Email per privater Nachricht, dann sende ich dir diverse 
PDF die ich über LON habe.

Peter

von Jochen S. (Gast)


Lesenswert?

Hallo Peter,

Ich habe eine Rapido KP100, der ist baugleich mit der Biowin Exclusiv. 
Kannst Du mir schreiben wo ich die Service Software und das Interface 
bekomme?
Deine Visualisierung finde ich sehr gut, kann ich die an den Biowin 
anbinden?

Mit freundlichen Grüßen Jochen

von Peter M. (peter2003)


Lesenswert?

Hallo Jochen.

KP 100: Da habe ich folgende Installationsanleitung gefunden:
http://www.rapido-waermetechnik.at/pdf/manuals/Pelletkessel/Inst-Anl_KP100_D_011407_06-06_Rue.pdf

Wenn die für alle KP 100 gilt, wird man zwar mit der Service-SW sicher 
den Kessel auslesen/updaten können (den Feuerungsautomaten, siehe Seite 
22 Abb. 5.2), weil der ja sicher von Windhager ist, und auf XR2 1+2 der 
LON Bus raus kommt).
Die meisten Werte die in meiner Ansicht oben zu sehen sind, sind aber 
aus der Heizungssteuerung. Das ist bei mir ein UML+ und WVF+ von 
Windhager, die auch vom Bedienfeld des Kessels aus angesprochen werden 
können (und natürlich auch von der Service-SW).
Aber auch bei ältere UML/WVF (ohne "+") können die wichtigsten Werte 
über den LON ausgelesen werden. Eingestellt werden die aber "mechanisch" 
am Modul.

Beim KP 100 sieht es aber in diesem PDF so aus, wie wenn da eine andere 
Steuerung drin ist (Seite 17, "rapidomatic"). Die ist auch in den 
Bildschirm Ansichten des Bedienfeldes des KP 100 nicht zu sehen (bei mir 
ist Im Menü noch die Zeile "MES Module", wo es zum UML/WVF geht).

Das bedeutet nicht, dass nicht auch die "rapidomatic" über den LON 
gelesen/gesteuert werden kann.
Alleine ich (und vermutlich die Service-SW) haben davon keine Ahnung.

Alle Informationen zu den NV (Netzvariablen) von Kessel/UML/WVF habe ich 
aus der Service-SW bzw. den mitgelieferten Dateien.
Für die "rapidomatic" müsste man da erneut Grundlagenforschung 
betreiben.
Oder man ist damit zufrieden, was man aus dem Kessel an Daten bekommt.

Was man aus einem Kessel ausgelesen kann (Beispiele für VarioWin und 
fireWin):
####################################################################
1
Node: VarioWin
2
###############
3
NV:nvoError              (nvo_Störcode        )  Typ:SNVT_count(8)
4
NV:OXY_nvoHeating        (nvo_O2_Heizung      )  Typ:SNVT_lev_cont(21)
5
NV:nvoWvEnergyHold       (nvo_EnergyHold_HK   )  Typ:SNVT_lev_percent(81)
6
NV:nvoBwEnergyHold       (nvo_EnergyHold_WW   )  Typ:SNVT_lev_percent(81)
7
NV:WET_nvoTist           (nvo_WET_T_Kessel    )  Typ:SNVT_temp_p(105)
8
NV:GB_nvoNist            (A_GB_Drehzahl       )  Typ:SNVT_rpm(102)
9
NV:GB_nvoNsoll           (A_GB_Drehzahl_Soll  )  Typ:SNVT_rpm(102)
10
NV:FS_ioMsum             (B_Pellets_Gesamt    )  Typ:SNVT_count(8)
11
NV:FS_nviMfoerder        (A_FS_Menge_berech   )  Typ:SNVT_mass_kilo(24)
12
NV:FS_nciCO2             (E_Korr_Brennstoff   )  Typ:UNVT(0)
13
NV:FS_nvoRotation        (A_FS_Überwachung    )  Typ:SNVT_lev_percent(81)
14
NV:PMX_Status            (nvo_FMP_Status      )  Typ:UNVT(0)
15
NV:PMX_nvoLstg           (P_Leistung          )  Typ:SNVT_lev_cont(21)
16
NV:PMX_PwrAvg            (P_Leistung_Mittel   )  Typ:SNVT_lev_cont(21)
17
NV:PMX_avgTb_Tk          (T_TB_TK_berechnet   )  Typ:SNVT_temp(39)
18
NV:PMX_state             (B_Zustand_Brenner   )  Typ:UNVT(0)
19
NV:PMX_eeBetrStd         (B_Betriebsstunden   )  Typ:SNVT_time_hour(124)
20
NV:PMX_eeNbrAnhz         (B_Anheizvorgänge    )  Typ:SNVT_count(8)
21
NV:PMX_CntShort          (Z_Ausbrand_Kurz     )  Typ:UNVT(0)
22
NV:PMX_CntLong           (Z_Ausbrand_Lang     )  Typ:UNVT(0)
23
NV:PMX_InModTmr          (Z_TimeModulation    )  Typ:SNVT_time_min(123)
24
NV:LPC_nvoState          (B_Druckschalter     )  Typ:UNVT(0)
25
NV:NIC_nvoValue          (T_Brennraum         )  Typ:SNVT_temp(39)
26
NV:NIC_nvoTboard         (T_Schaltfeld innen  )  Typ:SNVT_temp_p(105)
27
NV:NIC_nvoAvgVal         (T_Brennraum_Mittel  )  Typ:SNVT_temp(39)
28
NV:TK_nviSetP            (T_Kessel_Soll       )  Typ:SNVT_temp_p(105)
29
NV:TK_nvoTemp            (T_Kessel            )  Typ:SNVT_temp_p(105)
30
NV:TK_nviExtSetP         (T_Kessel_Soll_ext   )  Typ:SNVT_temp_p(105)
31
NV:TK_nvoAvgVal          (T_Kessel_Mittel     )  Typ:SNVT_temp_p(105)
32
NV:TK_Stpt               (T_Kessel_Soll       )  Typ:SNVT_temp_p(105)
33
NV:TK_nvoNSollBP         (A_Kesselpumpe       )  Typ:SNVT_lev_cont(21)
34
NV:RG_nvoTemp            (T_Abgas             )  Typ:SNVT_temp(39)
35
NV:PZS_status            (PZS_Betriebszustand )  Typ:UNVT(0)
36
NV:PZS_Restmenge         (PZS_Restmenge       )  Typ:SNVT_mass_kilo(24)
37
NV:RUE_cntError          (Z_Störung_Entasch   )  Typ:SNVT_count(8)
38
NV:RUE_status            (B_Zustand_Entasch   )  Typ:UNVT(0)
39
NV:RUE_cntEntaZue        (Z_Stör_Warmstart    )  Typ:SNVT_count(8)
40
NV:FWN_nviRunTm2Cln      (B_Kesselreinigung   )  Typ:SNVT_time_hour(124)
41
NV:FMx_status            (B_Betriebszustand   )  Typ:UNVT(0)
42
NV:WVF_nvoFBflag         (nvo_WVF_FB-Betr     )  Typ:SNVT_switch(95)
43
44
Node: FireWin
45
###############
46
NV:nvoTime               (nvo_Uhrzeit_FA      )  Typ:SNVT_time_stamp(84)
47
NV:nvoError              (nvo_Störcode        )  Typ:SNVT_count(8)
48
NV:nvoWvEnergyHold       (nvo_EnergyHold_HK   )  Typ:SNVT_lev_percent(81)
49
NV:nvoBwEnergyHold       (nvo_EnergyHold_WW   )  Typ:SNVT_lev_percent(81)
50
NV:WET_nvoTist           (nvo_WET_T_Kessel    )  Typ:SNVT_temp_p(105)
51
NV:GB_nvoNist            (A_GB_Drehzahl       )  Typ:SNVT_rpm(102)
52
NV:GB_nvoNsoll           (A_GB_Drehzahl_Soll  )  Typ:SNVT_rpm(102)
53
NV:FS_ioMsum             (B_Pellets_Gesamt    )  Typ:SNVT_count(8)
54
NV:FS_nviMfoerder        (A_FS_Menge_berech   )  Typ:SNVT_mass_kilo(24)
55
NV:FS_nciCO2             (E_Korr_Brennstoff   )  Typ:UNVT(0)
56
NV:FS_nvoRotation        (A_FS_Überwachung    )  Typ:SNVT_lev_percent(81)
57
NV:PMX_nvoLstg           (P_Leistung          )  Typ:SNVT_lev_cont(21)
58
NV:PMX_PwrAvg            (P_Leistung_Mittel   )  Typ:SNVT_lev_cont(21)
59
NV:PMX_avgTb_Tk          (T_TB_TK_berechnet   )  Typ:SNVT_temp(39)
60
NV:PMX_state             (B_Zustand_Brenner   )  Typ:UNVT(0)
61
NV:PMX_eeBetrStd         (B_Betriebsstunden   )  Typ:SNVT_time_hour(124)
62
NV:PMX_eeNbrAnhz         (B_Anheizvorgänge    )  Typ:SNVT_count(8)
63
NV:PMX_nvoLps            (B_Druckschalter     )  Typ:SNVT_switch(95)
64
NV:NIC_nvoValue          (T_Brennraum         )  Typ:SNVT_temp(39)
65
NV:NIC_nvoTboard         (T_Schaltfeld innen  )  Typ:SNVT_temp_p(105)
66
NV:NIC_nvoAvgVal         (T_Brennraum_Mittel  )  Typ:SNVT_temp(39)
67
NV:TK_nviSetP            (T_Kessel_Soll       )  Typ:SNVT_temp_p(105)
68
NV:TK_nvoTemp            (T_Kessel            )  Typ:SNVT_temp_p(105)
69
NV:TK_nviExtSetP         (T_Kessel_Soll_ext   )  Typ:SNVT_temp_p(105)
70
NV:TK_nvoRist            (T_Kessel_Rücklauf   )  Typ:SNVT_temp_p(105)
71
NV:TK_nvoAvgVal          (T_Kessel_Mittel     )  Typ:SNVT_temp_p(105)
72
NV:RG_nvoTemp            (T_Abgas             )  Typ:SNVT_temp(39)
73
NV:PZS_status            (PZS_Betriebszustand )  Typ:UNVT(0)
74
NV:FWN_nviRunTm2Cln      (B_Kesselreinigung   )  Typ:SNVT_time_hour(124)
75
NV:FMx_status            (B_Betriebszustand   )  Typ:UNVT(0)
76
NV:WVF_nvoFBflag         (nvo_WVF_FB-Betr     )  Typ:SNVT_switch(95)

Was man aus den UML[+] auslesen kann:
#####################################
1
Node: UML +
2
###############
3
NV:nvoTimeSet            (Lokale Zeit         )  Typ:SNVT_time_stamp(84)
4
NV:nvoOprMode            (Betriebsphase       )  Typ:UNVT(0)
5
NV:nvoCtrlMode           (nvo_Betriebswahl    )  Typ:UNVT(0)
6
NV:WET_nvoTsoll[0]       (WET_T_Soll_HK       )  Typ:SNVT_temp_p(105)
7
NV:WET_nvoTsoll[1]       (WET_T_Soll_WW       )  Typ:SNVT_temp_p(105)
8
NV:WET_nvoTist           (nvo_WET_T_Kessel    )  Typ:SNVT_temp_p(105)
9
NV:nviTaFb               (nvi_T_Aussen        )  Typ:SNVT_temp_p(105)
10
NV:nvoTa                 (T_Aussen            )  Typ:SNVT_temp_p(105)
11
NV:LX_nviTist[0]         (L_T_Boiler          )  Typ:SNVT_temp_p(105)
12
NV:LX_nviTsoll[0]        (L_T_Boiler1_Soll    )  Typ:SNVT_temp_p(105)
13
NV:LX_nvoPump[0]         (L_Pumpe_BK1         )  Typ:SNVT_lev_cont(21)
14
NV:LX_nvoValve[0]        (L_Ladeventil_BK1    )  Typ:SNVT_lev_cont(21)
15
NV:WVF_nviTPO            (T_PufferOben TPO    )  Typ:SNVT_temp_p(105)
16
NV:WVF_nviTPU            (T_PufferUnten TPU   )  Typ:SNVT_temp_p(105)
17
NV:WVF_nviTPM            (nvi_WVF_TPM         )  Typ:SNVT_temp_p(105)
18
NV:M_nviTVsoll           (T_Vorlauf_Soll      )  Typ:SNVT_temp_p(105)
19
NV:M_nviTVist            (T_Vorlauf           )  Typ:SNVT_temp_p(105)
20
NV:M_nvoPump             (Pumpe               )  Typ:SNVT_lev_cont(21)
21
NV:M_nvoValve            (M_Mischventil       )  Typ:SNVT_lev_percent(81)
22
NV:FA_nviTVsoll          (FA_T_Kessel_Soll    )  Typ:SNVT_temp_p(105)
23
NV:FA_nvoTk              (FA_T_Kessel_VL      )  Typ:SNVT_temp_p(105)
24
NV:FA_nvoTr              (FA_T_Kessel_RL      )  Typ:SNVT_temp_p(105)
25
NV:FA_nvoError           (FA_Störcode         )  Typ:SNVT_count(8)
26
NV:nvoTi                 (T_Raum              )  Typ:SNVT_temp_p(105)
27
NV:nvoTiStpt             (T_Raum_Soll         )  Typ:SNVT_temp_p(105)
28
NV:nvoError              (nvo_Störcode        )  Typ:SNVT_count(8)
29
NV:nviError              (nvi_Störcode        )  Typ:SNVT_count(8)
30
31
Node: UML C1
32
###############
33
NV:nvoTimeSet            (Lokale Zeit         )  Typ:SNVT_time_stamp(84)
34
NV:nviError              (nvi_Störcode        )  Typ:SNVT_count(8)
35
NV:nvoError              (nvo_Störcode        )  Typ:SNVT_count(8)
36
NV:nciLocation           (Bezeichnung         )  Typ:SNVT_str_asc(36)
37
NV:WET_nvoTsoll[0]       (WET_T_Soll_HK       )  Typ:SNVT_temp_p(105)
38
NV:WET_nvoTsoll[1]       (WET_T_Soll_WW       )  Typ:SNVT_temp_p(105)
39
NV:WET_nvoTist           (nvo_WET_T_Kessel    )  Typ:SNVT_temp_p(105)
40
NV:WET_m                 (??                  )  Typ:UNVT(0)
41
NV:nviTaFb               (nvi_T_Aussen        )  Typ:SNVT_temp_p(105)
42
NV:nvoTa                 (T_Aussen            )  Typ:SNVT_temp_p(105)
43
NV:TA_m                  (                    )  Typ:UNVT(0)
44
NV:LX_nviTist[0]         (L_T_Boiler          )  Typ:SNVT_temp_p(105)
45
NV:LX_nviTsoll[0]        (L_T_Boiler1_Soll    )  Typ:SNVT_temp_p(105)
46
NV:LX_nvoPump[0]         (L_Pumpe_BK1         )  Typ:SNVT_lev_cont(21)
47
NV:LX_nvoValve[0]        (L_Ladeventil_BK1    )  Typ:SNVT_lev_cont(21)
48
NV:WVF_nviTPO            (T_PufferOben TPO    )  Typ:SNVT_temp_p(105)
49
NV:M_nviTVsoll           (T_Vorlauf_Soll      )  Typ:SNVT_temp_p(105)
50
NV:M_nviTVist            (T_Vorlauf           )  Typ:SNVT_temp_p(105)
51
NV:M_nvoPump             (Pumpe               )  Typ:SNVT_lev_cont(21)
52
NV:M_nvoValve            (M_Mischventil       )  Typ:SNVT_lev_percent(81)
53
NV:RC_nvoMode[0]         (BDM1_Betriebsart    )  Typ:UNVT(0)
54
NV:RC_nviError[0]        (BDM_Störcode        )  Typ:SNVT_count(8)
55
NV:RC_nvoSpaceTemp[0]    (BDM_T_Raum          )  Typ:SNVT_temp_p(105)
56
NV:RC_nvoHeatSetPt[0]    (                    )  Typ:SNVT_temp_p(105)
57
NV:RC_nvoBoilSetPt[0]    (BDM_T_Boiler_Soll   )  Typ:SNVT_temp_p(105)
58
NV:RC_nviSolarTemp       (BDM_TSA_Koll.Austr  )  Typ:SNVT_temp_p(105)
59
NV:RC_nviSolarEnrgy      (BDM_Solargewinn     )  Typ:SNVT_elec_kwh(13)
60
NV:FA_nviTVsoll          (FA_T_Kessel_Soll    )  Typ:SNVT_temp_p(105)
61
NV:FA_nvoTk              (FA_T_Kessel_VL      )  Typ:SNVT_temp_p(105)
62
NV:FA_nvoTr              (FA_T_Kessel_RL      )  Typ:SNVT_temp_p(105)
63
NV:FA_nviExtTsoll        (                    )  Typ:SNVT_temp_p(105)
64
NV:SYS_pack              (                    )  Typ:UNVT(0)

LON-USB Adapter: http://www.xlon.de/index.htm (XLON-USB RS485)

Service-SW: sende mir deine Email Adresse für nähere angaben.

Grüße, Peter

: Bearbeitet durch User
von Jochen S. (Gast)


Lesenswert?

Vielen Dank für die Infos.
Meine E-Mail Adresse lautet sierck@gmx.de (Sierck at gmx Punkt de)
Mit freundlichen Grüßen Jochen

von Stephan M. (thesimpsons)


Lesenswert?

Hi Peter,

ich hab mich länger nicht mehr mit dem LON Bus meines Windhagers 
beschäftigt und deine Erfolge erst heute gelesen, kannst du mich mal 
unter the.simpsons@aon.at kontaktieren wegen weiterer Details ?

DANKE und lg

von Stephan K. (stephan_kw)


Lesenswert?

Ich hoffe der Thread wird noch gelesen.
Ich habe eine Windhager XenoWin und würde gerne die Daten der Gastherme 
auslesen. Die Frage die sich stellt ob die XenoWin Anlage ebenfalls über 
die Schnittstelle verfügt und überhaupt ausgelesen werden kann.
(Ich vermute Mal ja, der Techniker ist ja dazu auch in der Lage)

Sofern @peter2003 noch mitliest würde mich die Bezugsquelle des 
Schnittstellenkabels und der Software interessieren. Wenn ich die 
Angaben im Thread richtig gelesen habe so kann man das Kabel und xlon.de 
kaufen - gibt es günstigere Möglichkeiten? Ist ja nicht gerade billig.

Gibt es die entwickelte Auslesesoftware vielleicht in einem Github Repo?

Falls eine Mailadresse benötigt wird: stephan.kw+lonbus (a) gmail.com

von Peter M. (peter2003)


Lesenswert?

Hallo Stephan,

im Beitrag "Re: LON Bus Windhager mitlesen/steuern" 
sind alle Systeme gelistet, die die Service SW bedienen kann. Das sind 
alles Windhager Systeme.

Windhager verkauft zwar Gaskessel/thermen, die sind meines Wissens aber 
alle zugekauft. So wie andere Hersteller Kessel von Windhager unter 
deren Namen verkaufen.

Die sind aber nicht mit dieser Service SW zu bedienen. Welche 
Schnittstelle dein XenoWin hat (und ob er eine hat), kannst du nur in 
den technischen Unterlagen des original Herstellers sehen.

Den XLON-USB gibt es nur beim Hersteller. Meine SW, um mit einem 
XLON-USB einen Windhager Kessel auszulesen, nur bei mir (VB2005).

Peter

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

Hello

Is it ok to write in english? Ansewr in German is ok for me :)

Very great thread this! Good work from Peter and many more!

I have recently installed a Biowin Exklusiv, and would like to connect 
it with an Arduino board or a Raspberry Pi.

Is it the LonWorks/LonTalk protocol that is used by Windhager?

Peter, would you be so kind and send also me the information you have 
collected about the bus-interface?   trnilsson at gmail punkt com

Thomas, Gothenburg, Sweden

von Peter M. (peter2003)


Lesenswert?

Hello Thomas, more details via direct email.

Peter

von MrMint (Gast)


Lesenswert?

Hallo Zusammen,

würde mich ebenso über nähere Informationen zu LON BUS und Windhager 
Pelletkesseln freuen. mrmint bei gmx net. Vielen Dank im Voraus!

von Roman B. (rbrunka)


Lesenswert?

Hallo Thomas,

ich habe den BioWin2 Touch und kann die Daten über API auslesen.
Da brauchst Du:
1. einen Rechner (kann auch RaspberryPi sein)
2. FHEM https://fhem.de/
3. und einen zusätzlichen Modul: 
https://github.com/tobias-d-oe/fhem-windhager

Bei mir funktioniert das Ganze gut. Ich versuche gerade einen Modul für 
ioBroker zu schreiben, das auch die API-Schnittstelle verwendet.

VG.
Roman

von Thomas Nilsson (Gast)


Lesenswert?

Aha, that was really interesting information. There is a LON to LAN 
converter, the RC3070. That needs to be further investigated!

Thanks!

von Karl Z. (griffin27)


Lesenswert?

Roman B. schrieb:
> Bei mir funktioniert das Ganze gut. Ich versuche gerade einen Modul für
> ioBroker zu schreiben, das auch die API-Schnittstelle verwendet.

Hallo Roman,

wie läuft es mit deiner Visualisierung? Wir haben nun auch so einen 
Pellets Kessel von Windhager mit dem Touchpanel, das sich auch via 
Ethernet per Handy-App steuern lässt.

Kannst du die Werte nur auslesen, oder auch Werte manipulieren?

LG, Karl

von Roman B. (rbrunka)


Lesenswert?

Hallo Karl,

es gibt zwei Möglichkeiten:
1. Du nimmst das FHEM-Modul: 
https://github.com/tobias-d-oe/fhem-windhager und liest die Anlage aus
2. Du wartest noch eine Woche bis ich mein Modul (Javascript für 
ioBroker) veröffentliche

Mit dem FHEM-Modul kannst Du die Werte nur auslesen. Mit meinem Modul 
könntest Du auch die Module auslesen, aber auch steuern: z.B. habe ich 
die Alarmanlage mit dem Warmwasserkreislauf verbunden - wird die 
Alarmanlage scharf, schaltet sich die Zirkulationspumpe aus. ioBroker 
macht hier alles. Ich habe nur den Adapter geschrieben. Das hat leider 
noch keine Admin-Oberfläche. Aber bis Ende der nächsten KW müsste ich 
das fertig haben...

VG.
Roman

von Karl Z. (griffin27)


Lesenswert?

Hallo Roman,

wenn alles glatt läuft, dann schreibe ich auch einen Daemon. Dieser 
sollte dann eine Schnittstelle zwischen der Web API und MQTT bilden. Das 
ganze sollte dann in Home Assistant integriert werden.

Dann sollten wir drei die Wichtigsten Sprachen eingebunden haben :)

Aber ich werd so schnell noch nicht dazukommen, und werde mir somit 
deine Lösung gerne Anschauen.

Hab nun schon 3 mal mit dem Kundensupport telefoniert, aber die Herren 
dort wollen echt nix rausrücken. Die API ist oft gar nicht dokumentiert. 
Bei uns werden im Optimalfall alle Radiatoren mit Funk-Ventile 
ausgestattet, die dann von einer Zentralen stelle gesteuert werden.

LG, Karl

von Christian (Gast)


Lesenswert?

Hallo allerseits,

Erstmal Hut-Ab was hier schon geleistet wurde und zusammengetragen 
wurde. ;-)

Ich habe eine BioWin Exklusiv und würde auch gerne eine Steuerung meiner 
Heizung realisieren.

Bin gerade am recherchieren was ich alles dazu brauche. (LON?)
Könnte dazu nähere Info´s brauchen.

Meine E-Mail lautet le(punkt)ram(ät)gmx(punkt)at

Vielen Dank und liebe Grüße
Christian

von Roman B. (rbrunka)


Lesenswert?

Hallo Zusammen,

leider habe ich mit dem Adapter noch nicht geschafft... Mein Urlaub war 
zu kurz.

Aber für die, die sich damit auskennen, nenne ich einfach paar Wörter:
- Login: Service, Password: kann man hier bekommen: 
https://connect.windhager.com/
- REST API mit DigestAuth
- Werte lesen: GET
- Werte schreiben: PUT (value="Wert")

- http://BioWin-IP/api-docs/ - hier sind die API Docs
- http://BioWin-IP/api/1.0/datapoint/1/15/0/115/0 - bei mir die 
Aussentemperatur

Viel Spaß,
Roman

von Roman B. (rbrunka)


Lesenswert?

Hallo Christian,

auf Deiner Stelle würde ich nur mit API arbeiten. Ich wollte auch mal 
über LON steuern. Die Steuerung über API ist aber viel einfacher und 
billiger.

VG.
Roman

von Karl (Gast)


Lesenswert?

Super Roman,
das mit api-docs muss ich probieren, wie bist denn auf diese URL 
gekommen?

Passwort kann man durch 10s auf Resettaster am Touchpanel auch löschen. 
Aber dann ist der Remotezugang von außen auch weg...

von Christian (Gast)


Lesenswert?

Hallo Zusammen,

ich denke ich werde die Steuerung anderweitig realisieren, jedoch möchte 
ich gerne per LON Bus die Prozessdaten (Temperaturen, Verbrauch,...) 
auslesen.
Mittlerweile konnte ich ein MES Kommunikationsmodul ergattern, brauche 
dazu aber noch nähere Info´s zu den Datenpunkten, Befehlen, etc,..

Könnte mir jemand diese dankenswerterweise zusenden?
Meine E-Mail Adresse wäre le(punkt)ram(ät)gmx(punkt)at

Vielen Dank
Christian

von Rainer Müller (Gast)


Lesenswert?

Hallo Christian,

ich habe vor etwa 1 Jahr auch meine Windhager Steuerung (Firewin) 
ersetzt mit einer UVR 16x2 von der Technischen Alternative. Diese 
Steuerung kann ich nur empfehlen. Die Brenneranforderung habe ich über 
die X18 Klemme (0-10V) an meinem Kessel realisiert, d.h. die UVR schickt 
z.B. 7,5V und fordert damit eine Kessel-Vorlauftemperatur von 75°C an. 
Den Rest steuert die UVR, also Pumpen, Mischer, etc. selbst. Mir war das 
aber auch noch zu wenig, da ich z.B. Fehlermeldungen, Pelletsverbrauch 
usw. auch in meiner Haussteuerung sehen möchte. Deshalb habe ich mir vor 
3 Wochen nun auch den XLON USB Adapter besorgt. Zum Auslesen der Daten 
vom Kessel nimmst du am Besten die Windhager Software MES und 
dekompilierst sie mit dem ILSpy. Damit kannst du ein C# Projekt 
generieren. Das kannst du dann entsprechend umbauen. Alternativ kann ich 
dir auch mal meinen bisherigen Code schicken bei Bedarf.

LG, Rainer.

von Karl Z. (griffin27)


Lesenswert?

Rainer Müller schrieb:
> nimmst du am Besten die Windhager Software MES und
> dekompilierst sie mit dem ILSpy. Damit kannst du ein C# Projekt
> generieren. Das kannst du dann entsprechend umbauen.

Kann es sein, dass das nicht ganz legal ist? Nur so aus Interesse. Bei 
so proprietären Systemen darf ruhig auch mal illegal gehandelt werden.

Eigentlich müssten so Systeme immer mit offenen Schnittstellen 
ausgeliefert werden müssen, da man sonst einem Vendorlockin unterliegt. 
Hier sollte sich der Konsumentenschutz mal engagieren, denke ich.

von pkuli6kg (Gast)


Lesenswert?

Hallo, ich bin über das KNX-UF auf den Thread gestoßen, ich habe mich 
auch lange mit dem Auslesen der Heizung beschäftigt, und habe den weg 
über die API eingeschlagen. Aktuell habe ich ein kleines PHP Skript 
(welches in einem EDOMI LBS läuft) welches mir alle relevanten DAten 
ausliest. ebenso kann ich Daten schreiben (Also RT setzen, oder 
ähnliches)

Hier ein Auszug aus meinem Code - man kann sich auch eine einfache 
Website basteln und die Werte dort ausgeben, habe ich bereits auch 
laufen, da ich mit meinem GIRA Homeserver die Website dann auslese. Und 
auch übers Web kann man dann einfach Werte ändern!

LG PETER
1
$url = $E[2]['value']; // URL für Abfrage
2
$login = $E[3]['value'];  // User vom LBS-Eingang
3
$password = $E[4]['value'];  // Password vom LBS-Eingang
4
$ch = curl_init();
5
//Login Daten
6
curl_setopt($ch, CURLOPT_URL,$url);
7
curl_setopt($ch, CURLOPT_VERBOSE, 1);
8
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
9
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
10
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
11
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
12
$result  = curl_exec($ch);
13
$json_raw=('{"entries":' . $result) . '}';
14
15
$json=json_decode($json_raw);
16
$data = json_decode($json_raw);
17
$rows=(count($data->entries)-1);
18
19
20
21
//OID Nummer den jeweiligen Werten zuweisen, als Variable festlegen!
22
$OID_Aussentemperatur = '/1/15/0/0/0/0';  
23
$OID_Warmwassertemperatur_IST ='/1/15/0/0/4/0';
24
$OID_Warmwassertemperatur_SOLL ='/1/15/0/1/4/0';
25
$OID_Kesseltemp_IST = '/1/15/0/0/7/0';
26
$OID_Kesseltemp_SOLL = '/1/15/0/1/7/0';
27
$OID_VORLAUF_HK1_IST = '/1/15/0/0/2/0';
28
$OID_VORLAUF_HK1_SOLL ='/1/15/0/1/2/0';
29
$OID_VORLAUF_HK2_IST ='/1/15/1/0/2/0';
30
$OID_VORLAUF_HK2_SOLL ='/1/15/1/1/2/0';
31
$OID_RAUMT_HK1_IST ='/1/15/0/0/1/0';
32
$OID_RAUMT_HK2_IST ='/1/15/1/0/1/0';
33
$OID_RAUMT_HK1_SOLL ='/1/15/0/1/1/0';
34
$OID_RAUMT_HK2_SOLL ='/1/15/1/1/1/';
35
$OID_KESSELLEISTUNG ='/1/60/0/0/9/0';
36
$OID_ABGASTEMPERATUR ='/1/60/0/0/11/0';
37
$OID_HKP_HK1 ='/1/15/0/1/20/0';
38
$OID_HKP_HK2 ='/1/15/1/1/20/0';
39
$OID_WW_Ladepumpe ='/1/15/0/1/66/0';
40
$OID_MISCHER_HK1 ='/1/15/0/1/21/0';
41
$OID_MISCHER_HK2 ='/1/15/1/1/21/0';
42
$OID_MODUS ='/1/15/0/3/50/0';
43
$OID_PHASE ='/1/60/0/2/1/0';
44
$OID_VERBRAUCH_GES ='/1/60/0/23/103/0';
45
$OID_VERBRAUCH_FUELLUNG ='/1/60/0/23/100/0';
46
$OID_T_REINIGUNG ='/1/60/0/20/61/0';
47
$OID_T_HAUPTREINIGUNG ='/1/60/0/20/62/0';
48
$OID_T_WARTUNG ='/1/60/0/20/63/0';
49
$OID_BRENNERSTARTS ='/1/60/0/2/80/0';
50
$OID_BETRIEBSSTUNDEN='/1/60/0/2/81/0';
51
$OID_KESSEL_SOLL_TEMP ='/1/60/0/1/7/0';
52
$OID_BETRIEBSWAHL_HK1 ='/1/15/0/3/50/0';
53
$OID_BETRIEBSWAHL_HK2 ='/1/15/1/3/50/0';
54
$OID_ALARM='/1/60/0/2/0/0';
55
56
57
$i=0;
58
for ($i = 0; $i <= $rows; $i++) {
59
  //Aussentemperatur
60
if ($json->entries[$i]->OID == $OID_Aussentemperatur) {
61
    $Aussentemperatur    = $json->entries[$i]->value;
62
}
63
  //Warmwassertemperatur
64
if ($json->entries[$i]->OID == $OID_Warmwassertemperatur_IST) {
65
    $Warmwassertemperatur_IST  = $json->entries[$i]->value;
66
}
67
if ($json->entries[$i]->OID == $OID_Warmwassertemperatur_SOLL) {
68
    $Warmwassertemperatur_SOLL  = $json->entries[$i]->value;
69
}
70
if ($json->entries[$i]->OID == $OID_Kesseltemp_IST) {
71
    $Kesseltemp_IST  = $json->entries[$i]->value;
72
}
73
if ($json->entries[$i]->OID == $OID_Kesseltemp_SOLL) {
74
    $Kesseltemp_SOLL  = $json->entries[$i]->value;
75
}
76
if ($json->entries[$i]->OID == $OID_VORLAUF_HK1_IST) {
77
    $VORLAUF_HK1_IST  = $json->entries[$i]->value;
78
}
79
if ($json->entries[$i]->OID == $OID_VORLAUF_HK1_SOLL) {
80
    $VORLAUF_HK1_SOLL  = $json->entries[$i]->value;
81
}
82
if ($json->entries[$i]->OID == $OID_VORLAUF_HK2_IST) {
83
    $VORLAUF_HK2_IST  = $json->entries[$i]->value;
84
}
85
if ($json->entries[$i]->OID == $OID_VORLAUF_HK2_SOLL) {
86
    $VORLAUF_HK2_SOLL  = $json->entries[$i]->value;
87
}
88
if ($json->entries[$i]->OID == $OID_RAUMT_HK1_IST) {
89
    $RAUMT_HK1_IST  = $json->entries[$i]->value;
90
}
91
if ($json->entries[$i]->OID == $OID_RAUMT_HK1_SOLL) {
92
    $RAUMT_HK1_SOLL  = $json->entries[$i]->value;
93
}
94
if ($json->entries[$i]->OID == $OID_RAUMT_HK2_IST) {
95
    $RAUMT_HK2_IST  = $json->entries[$i]->value;
96
}
97
if ($json->entries[$i]->OID == $OID_RAUMT_HK2_SOLL) {
98
    $RAUMT_HK2_SOLL  = $json->entries[$i]->value;
99
}
100
if ($json->entries[$i]->OID == $OID_VORLAUF_HK2_IST) {
101
    $VORLAUF_HK2_IST  = $json->entries[$i]->value;
102
}
103
if ($json->entries[$i]->OID == $OID_VORLAUF_HK2_SOLL) {
104
    $VORLAUF_HK2_SOLL  = $json->entries[$i]->value;
105
}
106
if ($json->entries[$i]->OID == $OID_KESSELLEISTUNG) {
107
    $KESSELLEISTUNG  = $json->entries[$i]->value;
108
}
109
if ($json->entries[$i]->OID == $OID_ABGASTEMPERATUR) {
110
    $ABGASTEMPERATUR  = $json->entries[$i]->value;
111
}
112
if ($json->entries[$i]->OID == $OID_HKP_HK1) {
113
    $HKP_HK1  = $json->entries[$i]->value;
114
    
115
}if ($json->entries[$i]->OID == $OID_HKP_HK2) {
116
    $HKP_HK2  = $json->entries[$i]->value;
117
}
118
if ($json->entries[$i]->OID == $OID_WW_Ladepumpe) {
119
    $WW_Ladepumpe  = $json->entries[$i]->value;
120
}
121
if ($json->entries[$i]->OID == $OID_MISCHER_HK1) {
122
    $MISCHER_HK1  = $json->entries[$i]->value;
123
}
124
if ($json->entries[$i]->OID == $OID_MISCHER_HK2) {
125
    $MISCHER_HK2  = $json->entries[$i]->value;
126
}
127
if ($json->entries[$i]->OID == $OID_MODUS) {
128
    $str_modus  = $json->entries[$i]->value;
129
}
130
if ($json->entries[$i]->OID == $OID_PHASE) {
131
    $str_phase  = $json->entries[$i]->value;
132
}
133
if ($json->entries[$i]->OID == $OID_VERBRAUCH_GES) {
134
    $VERBRAUCH_GES  = $json->entries[$i]->value;
135
}
136
if ($json->entries[$i]->OID == $OID_VERBRAUCH_FUELLUNG) {
137
    $VERBRAUCH_FUELLUNG  = $json->entries[$i]->value;
138
}
139
if ($json->entries[$i]->OID == $OID_T_REINIGUNG) {
140
    $T_REINIGUNG  = $json->entries[$i]->value;
141
}
142
if ($json->entries[$i]->OID == $OID_T_HAUPTREINIGUNG) {
143
    $T_HAUPTREINIGUNG  = $json->entries[$i]->value;
144
}
145
if ($json->entries[$i]->OID == $OID_T_WARTUNG) {
146
    $T_WARTUNG  = $json->entries[$i]->value;
147
}
148
if ($json->entries[$i]->OID == $OID_BRENNERSTARTS) {
149
    $BRENNERSTARTS  = $json->entries[$i]->value;
150
}
151
if ($json->entries[$i]->OID == $OID_BETRIEBSSTUNDEN) {
152
    $BETRIEBSSTUNDEN  = $json->entries[$i]->value;
153
}
154
if ($json->entries[$i]->OID == $OID_BETRIEBSWAHL_HK1) {
155
    $str_modus_hk1  = $json->entries[$i]->value;
156
}
157
if ($json->entries[$i]->OID == $OID_BETRIEBSWAHL_HK2) {
158
    $str_modus_hk2  = $json->entries[$i]->value;
159
}
160
if ($json->entries[$i]->OID == $OID_ALARM) {
161
    $str_alarm  = $json->entries[$i]->value;
162
}
163
}
164
switch($str_phase) //Zuordnung der Betriebsphase
165
{
166
  case("0"):
167
  $PHASE=('"Brenner gesperrt"');
168
  break;
169
  case("1"):
170
  $PHASE=('Selbsttest');
171
  break;
172
  case("2"):
173
  $PHASE=('WE ausschalten');
174
  break;
175
  case("3"):
176
  $PHASE=('Standby');
177
  break;
178
  case("4"):
179
  $PHASE=('Brenner AUS');
180
  break;
181
  case("5"):
182
  $PHASE=('Vorspülen');
183
  break;
184
  case("6"):
185
  $PHASE=('Zündphase');
186
  break;
187
  case("7"):
188
  $PHASE=('Flammenstabilisierung');
189
  break;
190
  case("8"):
191
  if($res_wwp >= "1" and $res_mischer=-100){
192
  $PHASE=('Warmwasser-Ladung');
193
    }else{
194
  $PHASE=('Modulationsbetrieb');
195
    }
196
  break;
197
  case("17"):
198
  $PHASE=('Ausbrand');
199
  break;
200
}
201
202
switch($str_modus) //Zuordnung aktueller Betriebsmodus Allgemein
203
{
204
  case("0"):
205
  $MODUS=('Standby');
206
  break;
207
  default: 
208
  $MODUS=('Kein Modus erkannt');
209
  break;
210
  case("1"):
211
  $MODUS=('Heizprogramm 1');
212
  break;
213
  case("2"):
214
  $MODUS=('Heizprogramm 2');
215
  break;
216
  case("3"):
217
  $MODUS=('Heizprogramm 3');
218
  break;
219
  case("4"):
220
  $MODUS=('Heizbetrieb');
221
  break;
222
  case("5"):
223
  $MODUS=('Absenkbetrieb');
224
  break;
225
  case("6"):
226
  $MODUS=('Warmwasserprogramm');
227
  break;
228
  case("7"):
229
  $MODUS=('LEER');
230
  break;
231
232
}
233
234
switch($str_modus_hk1) //Zuordnung aktueller Betriebsmodus Allgemein
235
{
236
  case("0"):
237
  $BETRIEBSWAHL_HK1=('Standby');
238
  break;
239
  default: 
240
  $BETRIEBSWAHL_HK1=('Kein Modus erkannt');
241
  break;
242
  case("1"):
243
  $BETRIEBSWAHL_HK1=('Heizprogramm 1');
244
  break;
245
  case("2"):
246
  $BETRIEBSWAHL_HK1=('Heizprogramm 2');
247
  break;
248
  case("3"):
249
  $BETRIEBSWAHL_HK1=('Heizprogramm 3');
250
  break;
251
  case("4"):
252
  $BETRIEBSWAHL_HK1=('Heizbetrieb');
253
  break;
254
  case("5"):
255
  $BETRIEBSWAHL_HK1=('Absenkbetrieb');
256
  break;
257
  case("6"):
258
  $BETRIEBSWAHL_HK1=('Warmwasserprogramm');
259
  break;
260
  case("7"):
261
  $BETRIEBSWAHL_HK1=('LEER');
262
  break;
263
264
}
265
266
switch($str_modus_hk2) //Zuordnung aktueller Betriebsmodus Allgemein
267
{
268
  case("0"):
269
  $BETRIEBSWAHL_HK2=('Standby');
270
  break;
271
  default: 
272
  $BETRIEBSWAHL_HK2=('Kein Modus erkannt');
273
  break;
274
  case("1"):
275
  $BETRIEBSWAHL_HK2=('Heizprogramm 1');
276
  break;
277
  case("2"):
278
  $BETRIEBSWAHL_HK2=('Heizprogramm 2');
279
  break;
280
  case("3"):
281
  $BETRIEBSWAHL_HK2=('Heizprogramm 3');
282
  break;
283
  case("4"):
284
  $BETRIEBSWAHL_HK2=('Heizbetrieb');
285
  break;
286
  case("5"):
287
  $BETRIEBSWAHL_HK2=('Absenkbetrieb');
288
  break;
289
  case("6"):
290
  $BETRIEBSWAHL_HK2=('Warmwasserprogramm');
291
  break;
292
  case("7"):
293
  $BETRIEBSWAHL_HK2=('LEER');
294
  break;
295
296
}
297
298
switch($str_alarm)
299
{
300
    default: $alarm_text("Sonstiger Alarm");
301
break;
302
    case("-"): $alarm_text="Kein Alarm";
303
break;
304
    case("1"): $alarm_text="Primärluftklappe blockiert oder defekt.";
305
break;
306
    case("3"): $alarm_text="Sekundärluftklappe blockiert oder defekt.";
307
break;
308
    case("5"): $alarm_text="Entaschung / Rostrüttelung defekt oder steckt. Brennertopf reinigen.";
309
break;
310
    case("6"): $alarm_text="Motor Förderschnecke defekt";
311
break;
312
    case("8"): $alarm_text="Heizflächenreinigung defekt Heizflächenreinigung überprüfen.";
313
break;
314
    case("15"): $alarm_text="Netzspannung nicht vorhanden";
315
break;
316
    case("16"): $alarm_text="Saugzuggebläse defekt Gebläserad und Gebläsekasten reinigen.";
317
break;
318
    case("17"): $alarm_text="Saugzuggebläse steckt Gebläserad reinigen.";
319
break;
320
    case("18"): $alarm_text="Saugzuggebläse instabil";
321
break;
322
    case("37"): $alarm_text="Klappe Pelletszuführung öffnet nicht Klappe in Zuführeinheit überprüfen.";
323
break;
324
    case("40"): $alarm_text="Absperreinheit defekt Absperreinheit der Pelletszuführung öffnet oder schließt nicht.";
325
break;
326
    case("41"): $alarm_text="Schalter Deckel Vorratsbehälter defekt Schalter Deckel Vorratsbehälter überprüfen.";
327
break;
328
    case("42"): $alarm_text="Relais Saugturbine defekt Netzstecker am Kessel abstecken.";
329
break;
330
    case("57"): $alarm_text="Brennerstörung";
331
break;
332
    case("62"): $alarm_text="Zuluftklappe defekt bzw. öffnet nicht. Klappe überprüfen.";
333
break;
334
    case("71"): $alarm_text="Sicherheits-/Notschalter offen Schalterstellung bei Sicherheits- und  Notschaltern kontrollieren.";
335
break;
336
    case("76"): $alarm_text="Kesselfühler defekt Kesselfühler und Anschlüsse prüfen.";
337
break;
338
    case("78"): $alarm_text="Thermocontrolfühler defekt Thermocontrolfühler und Anschlüsse überprüfen.";
339
break;
340
    case("88"): $alarm_text="O2-Sonde defekt O2-Sonde und Anschlüsse überprüfen.";
341
break;
342
    case("89"): $alarm_text="O2-Sonde Heizung defekt O2-Sonde; Trafo und Anschlüsse überprüfen.";
343
break;
344
    case("101"): $alarm_text="TWE-Fühler defekt";
345
break;
346
    case("103"): $alarm_text="Kessel-Fühler defekt";
347
break;
348
    case("104"): $alarm_text="TPE-Fühler defekt";
349
break;
350
    case("105"): $alarm_text="TPA-Fühler defekt";
351
break;
352
    case("107"): $alarm_text="Saugzuggebläse steckt Gebläserad reinigen.";
353
break;
354
    case("114"): $alarm_text="Weichen-/Pufferfühler defekt Weichen-/Pufferfühler und Anschlüsse am Kaskadenmodul überprüfen.";
355
break;
356
    case("115"): $alarm_text="ZSK Kesselfühler defekt";
357
break;
358
    case("128"): $alarm_text="Keine Flammenbildung im Regelbetrieb Kessel und Brenner reinigen.";
359
break;
360
    case("129"): $alarm_text="Maximale Ausbrandzeit überschritten";
361
break;
362
    case("130"): $alarm_text="Brennraumtemperatur zu gering";
363
break;
364
    case("133"): $alarm_text="Sicherheitstemperatur Abschaltung Anlage und Fülldruck überprüfen.";
365
break;
366
    case("135"): $alarm_text="Übertemperatur am Schneckenrohr";
367
break;
368
    case("144"): $alarm_text="Sicherheitseinrichtung unterbrochen Sicherheitseinrichtung überprüfen.";
369
break;
370
    case("155"): $alarm_text="Wassermangelsicherung hat angesprochen Anlagendruck überprüfen.";
371
break;
372
    case("156"): $alarm_text="Kein Unterdruck im Brennraum bzw. Sensor defekt.";
373
break;
374
    case("171"): $alarm_text="Maximale Anheizzeit überschritten Brennertopf reinigen.";
375
break;
376
    case("186"): $alarm_text="Keine Kommunikation mit MES Modul";
377
break;
378
    case("187"): $alarm_text="Keine Kommunikation mit Feuerungsautomat Bindung Feuerungsautomat und  Anschlüsse überprüfen.";
379
break;
380
    case("188"): $alarm_text="Internal error occurred";
381
break;
382
    case("189"): $alarm_text="Keine Kommunikation mit Zusatzprint Bindung Zusatzprint; Feuerungsautomat  und Anschlüsse prüfen";
383
break;
384
    case("191"): $alarm_text="GAS-FA meldet Störung";
385
break;
386
    case("194"): $alarm_text="Keine Kommunikation mit einem Wärmeerzeuger";
387
break;
388
    case("195"): $alarm_text="Brennraumtür im Betrieb geöffnet";
389
break;
390
    case("206"): $alarm_text="Überwachung der Förderschnecke defekt";
391
break;
392
    case("208"): $alarm_text="Heizflächenreinigung defekt Heizflächenreinigung überprüfen.";
393
break;
394
    case("226"): $alarm_text="Keine Flammenbildung beim Zünden Zündvorgang nicht erfolgreich";
395
break;
396
    case("238"): $alarm_text="Zuführung saugt keine Pellets an Pelletsvorrat im Lagerraum und Zuführschlauch überprüfen.";
397
break;
398
    case("239"): $alarm_text="Sondenumschaltung defekt Umschalteinheit überprüfen.";
399
break;
400
    case("240"): $alarm_text="Absperreinheit Pelletszuführung offen Absperreinheit der Pelletszuführung schließt nicht.";
401
break;
402
    case("241"): $alarm_text="Deckel Vorratsbehälter offen Deckel Vorratsbehälter schließen.";
403
break;
404
    case("266"): $alarm_text="Fülltürschalter schaltet nicht Nicht mehr einheizen.";
405
break;
406
    case("268"): $alarm_text="Verkleidungstürschalter defekt";
407
break;
408
    case("281"): $alarm_text="Abgastemperaturfühler defekt Abgastemperaturfühler und Anschlüsse überprüfen.";
409
break;
410
    case("296"): $alarm_text="Vorlauffühler defekt";
411
break;
412
    case("297"): $alarm_text="Sollwert wird nicht erreicht";
413
break;
414
    case("299"): $alarm_text="RT-Fühler defekt";
415
break;
416
    case("300"): $alarm_text="WW-Fühler defekt";
417
break;
418
    case("320"): $alarm_text="Notbetrieb! Reinigung";
419
break;
420
    case("321"): $alarm_text="Notbetrieb! Hauptreinigung";
421
break;
422
    case("322"): $alarm_text="Aschebox entleeren; Brennraum  und Brennertopf reinigen.";
423
break;
424
    case("324"): $alarm_text="Die Wartung ist Voraussetzung für die Gerätegarantie.";
425
break;
426
    case("330"): $alarm_text="Brennraumtemperatur zu gering Hauptreinigung entsprechend der Bedienungsanleitung durchführen.";
427
break;
428
    case("345"): $alarm_text="Brennraumtür offen Brenner gesperrt.";
429
break;
430
    case("356"): $alarm_text="Brennraumdruck nicht stabil";
431
break;
432
    case("372"): $alarm_text="Anheizauswertung Zu geringe Brennkammertemperatur beim Anheizen.";
433
break;
434
    case("373"): $alarm_text="Zu geringe Leistungsabnahme beim Anheizen.";
435
break;
436
    case("374"): $alarm_text="Anheizabbruch";
437
break;
438
    case("375"): $alarm_text="Anheizen bei zu hoher Kesseltemperatur";
439
break;
440
    case("381"): $alarm_text="Vorratsbehälter leer Zeitprogramm sperrt Zuführung. Freigabezeit in Menü/ Betreiberebene ändern.";
441
break;
442
    case("382"): $alarm_text="Klappe oder Schalter im Vorratsbehälter defekt. Klappe und Schalter im Vorratsbehälter überprüfen.";
443
break;
444
    case("387"): $alarm_text="Fehler bei der Kommunikation mit Feuerungsautomat Reset Taste mindestens 5 sec drücken.";
445
break;
446
    case("390"): $alarm_text="Notbetrieb!  Kessel und Brenner reinigen. Reinigung bestätigen.";
447
break;
448
    case("393"): $alarm_text="Fehlermeldung E1";
449
break;
450
    case("395"): $alarm_text="Brennraum- oder Aschetür offen.";
451
break;
452
    case("396"): $alarm_text="Verkleidungstür schliessen.";
453
break;
454
    case("438"): $alarm_text="Eine Zone im Lagerraum ist leer Pelletsvorrat im Lagerraum überprüfen.";
455
break;
456
    case("496"): $alarm_text="Anlagen-Frostschutz aktiv";
457
break;
458
    case("499"): $alarm_text="Raum-Frostschutz aktiv";
459
break;
460
    case("500"): $alarm_text="WW-Frostschutz aktiv";
461
break;
462
    case("504"): $alarm_text="TP/TW Frostschutz aktiv";
463
break;
464
    case("520"): $alarm_text="Reinigung Aschelade entleeren; Asche unter Nachheizfläche entfernen. Thermocontrolfühler reinigen.";
465
break;
466
    case("521"): $alarm_text="Hauptreinigung Hauptreinigung entsprechend der Bedienungsanleitung durchführen.";
467
break;
468
    case("522"): $alarm_text="Reinigung Aschebox entleeren; Brennraum und Brennertopf reinigen.";
469
break;
470
    case("523"): $alarm_text="Hauptreinigung Hauptreinigung entsprechend der Bedienungsanleitung durchführen.";
471
break;
472
    case("524"): $alarm_text="Wartung Die Wartung ist Voraussetzung für die Gerätegarantie.";
473
break;
474
    case("581"): $alarm_text="Vorratsbehälter ist fast leer. Pellets nachfüllen.";
475
break;
476
    case("582"): $alarm_text="Vorratsbehälter ist leer. Pellets nachfüllen. Brenner wird gesperrt.";
477
break;
478
    case("590"): $alarm_text="Kessel und Brenner reinigen. Reinigung bestätigen.";
479
break;
480
    case("591"): $alarm_text="Vorsicht beim Öffnen der Fülltür Fülltür mind. 15 sek. lang anlüften.";
481
break;
482
    case("595"): $alarm_text="Tür offen";
483
break;
484
}
485
486
logic_setOutput($id, 1, $result);
487
logic_setOutput($id, 2, $Aussentemperatur);
488
logic_setOutput($id, 3, $Warmwassertemperatur_IST);
489
logic_setOutput($id, 4, $Warmwassertemperatur_SOLL);
490
logic_setOutput($id, 5, $Kesseltemp_IST);
491
logic_setOutput($id, 6, $Kesseltemp_SOLL);
492
logic_setOutput($id, 7, $VORLAUF_HK1_IST);
493
logic_setOutput($id, 8, $VORLAUF_HK1_SOLL);
494
logic_setOutput($id, 9, $VORLAUF_HK2_IST);
495
logic_setOutput($id, 10, $VORLAUF_HK2_SOLL);
496
logic_setOutput($id, 11, $RAUMT_HK1_IST);
497
logic_setOutput($id, 12, $RAUMT_HK1_SOLL);
498
logic_setOutput($id, 13, $RAUMT_HK2_IST);
499
logic_setOutput($id, 14, $RAUMT_HK2_SOLL);
500
logic_setOutput($id, 15, $KESSELLEISTUNG);
501
logic_setOutput($id, 16, $ABGASTEMPERATUR);
502
logic_setOutput($id, 17, $HKP_HK1);
503
logic_setOutput($id, 18, $HKP_HK2);
504
logic_setOutput($id, 19, $WW_Ladepumpe);
505
logic_setOutput($id, 20, $MISCHER_HK1);
506
logic_setOutput($id, 21, $MISCHER_HK1);
507
logic_setOutput($id, 22, $PHASE);
508
logic_setOutput($id, 23, $MODUS);
509
logic_setOutput($id, 24, $VERBRAUCH_GES);
510
logic_setOutput($id, 25, $VERBRAUCH_FUELLUNG);
511
logic_setOutput($id, 26, $T_REINIGUNG);
512
logic_setOutput($id, 27, $T_HAUPTREINIGUNG);
513
logic_setOutput($id, 28, $T_WARTUNG);
514
logic_setOutput($id, 29, $BRENNERSTARTS);
515
logic_setOutput($id, 30, $BETRIEBSSTUNDEN);
516
logic_setOutput($id, 31, $BETRIEBSWAHL_HK1);
517
logic_setOutput($id, 32, $BETRIEBSWAHL_HK2);
518
logic_setOutput($id, 33, $alarm_text);
519
//print_r($Aussentemperatur);

von Thomas (Gast)


Lesenswert?

Hallo Peter

Sehr interessant!

How do you connect to the LON bus, physically?

Thanks, Thomas

von Thomas (Gast)


Lesenswert?

Hi

Tonight I hooked my oscilloscope up with my Biowin.

I've read the LonTalk Protocol Specification (see link below), and 
section 35.7.3.2 of the processor SAM3X datasheet (see link below), the 
processor of the Arduino Due that I intend to use as it has a Manchester 
UART natively.

Based on info from these, and the oscilloscop measurements. I can 
conclude that the Biowin only uses the LON-bus in the mode that LonTalk 
calls "Special Purpose Mode". Because the BitSync is always a ZERO-ONE 
preamble, and the ByteSync varies between 0 and 1. While the "normal" 
usage of the LON bus specifies a number of 1's as the BitSync and always 
only a 0 as ByteSync. Which did not happen at all when I was logging the 
bus.

Well, that was the very first thing I noticed. I'll decode the data 
retreived on the bus, to see how it matches the LonTalk specification.

It would be really exciting if it will be possible to hook an Arduino up 
directly to the LON-bus :)

http://www.enerlon.com/JobAids/Lontalk%20Protocol%20Spec.pdf

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-11057-32-bit-Cortex-M3-Microcontroller-SAM3X-SAM3A_Datasheet.pdf

von Karl (Gast)


Lesenswert?

Great, Thomas. Please keep us up to date!

von Peter (Gast)


Lesenswert?

Thomas schrieb:
> Hallo Peter
>
> Sehr interessant!
>
> How do you connect to the LON bus, physically?
>
> Thanks, Thomas


Garnicht, ich baue die Verbindung übers LAN zum Webserver (RC 7030) 
direkt auf, und lese von dort die Daten ein!

Funktioniert nun schon seit einem halben Jahr einfach perfekt!

PETER

von pkuli6kg_KNXUF (Gast)


Lesenswert?

Habe den PHP Code nun ein wenig modifiziert und verbesser:

<?php
$url = 'http://IP-ADRESSE';; // URL für Abfrage
$login = 'Service';  // User vom LBS-Eingang
$password = 'PASSWORT';  // Password vom LBS-Eingang

//OID Nummer den jeweiligen Werten zuweisen, als Variable festlegen!
$liste = array(
array("Aussentemperatur", "/1/15/0/0/0/0"),
array("Warmwassertemperatur_IST", "/1/15/0/0/4/0"),
array("Warmwassertemperatur_SOLL", "/1/15/0/1/4/0"),
array("Kesseltemp_IST", "/1/15/0/0/7/0"),
array("Kesseltemp_SOLL", "/1/15/0/1/7/0"),
array("VORLAUF_HK1_IST", "/1/15/0/0/2/0"),
array("VORLAUF_HK1_SOLL", "/1/15/0/1/2/0"),
array("VORLAUF_HK2_IST", "/1/15/1/0/2/0"),
array("VORLAUF_HK2_SOLL", "/1/15/0/0/0/0"),
array("RAUMT_HK1_IST", "/1/15/0/0/1/0"),
array("RAUMT_HK2_IST", "/1/15/1/0/1/0"),
array("RAUMT_HK1_SOLL", "/1/15/0/3/51/0"),
array("RAUMT_HK2_SOLL", "/1/15/1/3/51/0"),
array("KESSELLEISTUNG", "/1/60/0/0/9/0"),
array("ABGASTEMPERATUR", "/1/60/0/0/11/0"),
array("HKP_HK1", "/1/15/0/1/20/0"),
array("HKP_HK2", "/1/15/1/1/20/0"),
array("WW_Ladepumpe", "/1/15/0/1/66/0"),
array("MISCHER_HK1", "/1/15/0/1/21/0"),
array("MISCHER_HK2", "/1/15/1/1/21/0"),
array("MODUS", "/1/15/0/3/50/0"),
array("PHASE", "/1/60/0/2/1/0"),
array("VERBRAUCH_GES", "/1/60/0/23/103/0"),
array("VERBRAUCH_FUELLUNG", "/1/60/0/23/100/0"),
array("T_REINIGUNG", "/1/60/0/20/61/0"),
array("T_HAUPTREINIGUNG", "/1/60/0/20/62/0"),
array("T_WARTUNG", "/1/60/0/20/63/0"),
array("BRENNERSTARTS", "/1/60/0/2/80/0"),
array("BETRIEBSSTUNDEN", "/1/60/0/2/81/0"),
array("KESSEL_SOLL_TEMP", "/1/60/0/1/7/0"),
array("BETRIEBSWAHL_HK1", "/1/15/0/3/50/0"),
array("BETRIEBSWAHL_HK2", "/1/15/1/3/50/0"),
array("ALARM", "/1/60/0/2/0/0")
);

$rows=(count($liste)-1);

$ch = curl_init();
//Login-Daten
$url = $url . '/api/1.0/datapoint'; // URL für Abfrage
$login = $login;  // User
$password = $password;  // Password

for($i=0; $i <= $rows; $i++) {
$oid_url= ($liste[$i][1]);


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url . $oid_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
curl_setopt($ch, CURLOPT_ENCODING,  '');
curl_exec($ch);

$result=curl_exec($ch);
$json_raw=('{"entries":' . $result) . '}';
//echo($result);
$json=json_decode($json_raw,true);
//print_r($json);

foreach ($json as $element) {
echo $liste[$i][0] .": " . $element["value"].'<br>';
}

curl_close($ch);
}

?>

von zuhu (Gast)


Lesenswert?

Hi pkuli6kg_KNXUF

Super script.

Ich bin gerade dabei meinen PuroWin auch mit PHP auszulesen.

Ich finde nur keine vollständige Liste meiner datapoints. Wie und wo 
hast du diese bekommen?



Eine vielleicht nützliche Info für die API:
Bei der Mycomfort App unter Einstellungen/Geschütze Einstellungen findet 
man eine DNS-Url wo man dann vom Internet aus auf den Ofen zugreifen 
kann. Ist nur die Frage ob das von Windhager mitgetrackt wird...


Grüße

von pkuli6g (Gast)


Lesenswert?

Hallo,

Ich habe keine vollständige Liste gefunden (Habe auch mit WH gesprochen, 
die konnten mir so eine Liste auch nicht geben, obwohl sie sehr 
hilfreich sind) - habe mir die Daten die ich auslesen wollte "einzeln" 
rausgesucht aus dem Web-Frontend.  Am besten den Wert suchen, und dann 
mit Firefox "F12" Entwicklerkonsole die URL suchen (das ist dann ja 
gleichzeitig der OID)

Die kannst du in meinem Script ja dann adaptieren, aber ich denke das 
diese ähnlich sind, oder?

Ich habe gerade gesehen, dass mein Skript nicht vollständig hochgeladen 
wurde, wenn du Hilfe brauchst kannst du mich gerne kontaktieren, und das 
Skript schicken, habe die Tage gerade eben wieder etwas verbessert.


Wo verwendest du dein System? Hast du KNX Bus mit Visualisierung, oder 
nur so?


peter.kulig(at)gmailDOTcom

LG PETER

von pkuli6g (Gast)


Lesenswert?

Achja, ganz vergessen:

Ja die URL ist so wie du sagtest, bzw. ganz einfach:

https://MAC-ADRESSE.windhager-dns.com/api/1.0/datapoint

Zur Info, unter http://IP/api-docs/ gibt es eine Dokumentation, habe ich 
gefunden, stehen einige Daten drinnen



Hier noch ein Code wie du Werte (zB. Raumtemperatur) ändern kannst:
1
$url = $E[2]['value'] . '/api/1.0/datapoint'; // URL für Abfrage
2
$login = $E[3]['value'];  // User vom LBS-Eingang
3
$password = $E[4]['value'];  // Password vom LBS-Eingang
4
$oid = $E[5]['value'];  // User vom LBS-Eingang
5
$value = $E[6]['value'];  // Password vom LBS-Eingang
6
$ch = curl_init();
7
logic_setOutput($id, 2, $oid);
8
//Daten in Array schreiben
9
//$array_json = array("OID","value");
10
$array_json->OID =$oid;
11
$array_json->value =$value;
12
13
//Aus dem Array JSON-Format machen
14
$data_json = json_encode($array_json);
15
//logic_setOutput($id, 2, $url);
16
//Abfrage ausführen
17
18
$ch = curl_init();
19
curl_setopt($ch, CURLOPT_URL, $url);
20
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
21
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
22
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data_json)));
23
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
24
curl_setopt($ch, CURLOPT_POSTFIELDS,$data_json);
25
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
26
$response  = curl_exec($ch);
27
curl_close($ch);
28
logic_setOutput($id, 1, $response);
29
logic_setOutput($id, 3, $value);
30
31
//EINLESEN DER NEUEN WERTE UND AKTUALISIEREN
32
$ch = curl_init();
33
//Login Daten
34
curl_setopt($ch, CURLOPT_URL,$url . $oid);
35
curl_setopt($ch, CURLOPT_VERBOSE, 1);
36
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
37
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
38
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
39
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
40
curl_exec($ch);
41
$result  = curl_exec($ch);
42
//echo($result);
43
$json=json_decode($result);
44
$wert_rm = $json->value;
45
$enum = $json->enum;
46
logic_setOutput($id,5, $enum);
47
48
// Abfrage wenn der abgefragte Datenpunkt die Betriebsmodi darstellt, ansonsten wird der value Wert direkt übernommen!
49
if ($enum =="[0,1,2,3,4,5,7]") {
50
switch($wert_rm) //Zuordnung aktueller Betriebsmodus Allgemein
51
{
52
  case("0"):
53
  $wert_rm=('Standby');
54
  break;
55
  default: 
56
  $wert_rm=('Kein Modus erkannt');
57
  break;
58
  case("1"):
59
  $wert_rm=('Heizprogramm 1');
60
  break;
61
  case("2"):
62
  $wert_rm=('Heizprogramm 2');
63
  break;
64
  case("3"):
65
  $wert_rm=('Heizprogramm 3');
66
  break;
67
  case("4"):
68
  $wert_rm=('Heizbetrieb');
69
  break;
70
  case("5"):
71
  $wert_rm=('Absenkbetrieb');
72
  break;
73
  case("6"):
74
  $wert_rm=('Warmwasserprogramm');
75
  break;
76
  case("7"):
77
  $wert_rm=('LEER');
78
  break;
79
}
80
}
81
82
logic_setOutput($id, 4, $wert_rm);

von Daniel_s (Gast)


Lesenswert?

Hi,

ich hab einen Windhager Kessel und ein MES modul. Gibts irgentwo noch 
die Service software?

von Peter M. (peter2003)


Lesenswert?

Hallo Daniel,

hast du denn einen XLON-USB Adapter? Denn nur mit dem funktioniert die 
Service SW.
Und selbst dann kannst du nur FW Updates bei den Modulen machen, und 
nichts auslesen.

von Daniel_S (Gast)


Lesenswert?

Hi,

nein ich hab das MES Modul mit ner Seriellen Schnittstelle an der Front. 
Das ist ein original Windhager Teil, dass man vorne in einen Einschub 
schieben kann. Damit kann man Daten auslesen mitloggen usw. Mein 
Heizungsbauer hatte da ne Service Software die das alles angezeigt 
hatte. Der hat die aber auch nicht mehr.

von Peter M. (peter2003)


Lesenswert?

Ich kenne dieses Teil, das war bei mir auch schon mal im Einsatz.

Die in diesem Beitrag oben erwähnte Service Software hat aber nichts mit 
dem MES Modul zu tun. Die dient, mit dem XLON-USB zusammen, "nur" zum 
updaten der Modul FW und zum tauschen der Hauptplatine des Kessels 
(sichert ein paar Parameter, und restauriert diese auf der neuen 
Baugruppe).

Für das MES Modul muss es eine extra Software geben, die aber nicht auf 
den Seiten von Windhager zu finden ist (und ich auch nicht habe).

von Daniel_S (Gast)


Lesenswert?

Ah ok. Das dumme ist, dass ich die Software schon mal hatte. Leider aber 
nicht mehr finde. Vor 8 Jahren, als die Anlage eingebaut wurde hat mein 
Heizungsbauer mir die gegeben. Ich denke der Einschub ist nicht viel 
mehr als ein LON-UART adapter (obwohl da ganz schön viel Bauteile drauf 
sind).

Ich frag nochmal meinen Heizi...

von Martin (Gast)


Lesenswert?

Hallo zusammen,
ich hatte den thread vor einigen Jahren mal gelesen und damals erschien 
mir das alles noch recht aussichtslos. Ihr seid mittlerweile ja wirklich 
erfolgreich. Ich habe auch seid einigen Jahren einen Windhager Biowin 2 
im Einsatz, der direkt an den Heizkreis angeschlossen ist. Um die 
Brenndauer zu verlängern, würde ich gerne die Warmwasserladung nicht 
mehr mit dem Wochenprogramm durchführen. Sobald es zu wenig Abnahme 
durch den Heizkreis gibt und die Kesseltemperatur richtung Maximalwert 
steigt, sollte die Warmwasserladung starten, bevor der Kessel in 
Ausbrand geht. Dazu müsste ich die aktuelle Kesseltemperatur auslesen 
(ich konnte auch einen Temperaturfühler am Vorlauf des Kessels montiren) 
und das wichtigste, ich müsste die manuelle Warmwasser Ladefreigabe 
emitieren. Gibt es dazu einen API Befehl?
Hardwareseitig habe ich einen Loxone Smart home Server, der über einen 
virtuellen Ausgang den API Befehl senden könnte.
Zur Verbindung mit dem Lon Bus müsste ich dann noch einen Windhager 
Webserver kaufen!? Den Webserver (RC 7030) scheint es wohl nicht mehr zu 
geben, sondern nur noch den Webserver Touch um gut 400Euro.
Auf der Platine des Pelletkessel selbst wird es vermutlich keinen 
"Eingang" geben um eine Warmwasserladefreigabe von extern auszulösen!?

von Peter M. (peter2003)


Angehängte Dateien:

Lesenswert?

Hallo Martin,

mit "meiner" Konfiguration (siehe Bild), mit dem XLON-USB Adapter, kann 
ich inzwischen nicht nur alle Werte aus dem Kessel und UML+ auslesen, 
sondern auch verändern. Das beinhaltet auch zB. die Warmwasserfreigabe, 
und auch das ändern der Heiz-/WW-Programme.
Aber alles nur über den XLON-USB mit den im Bild zu sehenden DLL auf 
Windows Basis.

Wenn eine andere Möglichkeit der LON Kopplung/Steuerung vorhanden ist, 
kann ich die LON "Befehle" liefern, die bei meinem VarioWin mit UML+ 
verwendet werden.

lg. Peter

von Rudolf S. (rudolf_s766)


Lesenswert?

Hallo Zusammen,
da ich an dieser Steuerung schon eine Weile interessiert bin, habe ich 
eine Frage an die Gruppe.
Bei mir läuft ein WH Genio 210 Gasbrennwertgerät mit MES Steuerung, gibt 
es da eine Möglichkeit die fernzusteuern?

Über Antworten würde ich mich freuen.

LG aus Österreich

Rudolf

von Peter M. (peter2003)


Lesenswert?

Hallo Rudolf,
wenn du in deiner MES Steuerung ein UML+ Modul hast (da sind keine Poti 
zum einstellen drauf im Unterschied zu einem alten UML), dann sollte es 
möglich sein.
Dann brauchst du eine LON Schnittstelle (zB. den oben genannten XLON-USB 
Adapter, aber teuer), und eine passende SW dazu.
Die Befehle und Steuermöglichkeiten für Pellets Kessel sind mir schon 
bekannt, für Gasgeräte nicht. Da müsste dann noch einiges an „Forschung“ 
gemacht werden.

Peter

von Rudolf S. (rudolf_s766)


Lesenswert?

Hallo Peter,

danke für Deine schnelle Rückmeldung. Es dürfte eine UML+ Steuerung 
sein, aber die Preise für die Schnittstelle sind ziemlich heftig. Da 
werde ich wohl passen, der Kessel ist auch schon 15 Jahre alt und 
eigentlich sehr zuverlässig. Für die Bastelei mit einer Steuerung fehlt 
mir dann auch die Geduld.

Vielen Dank auf alle Fälle.

LG Rudi

von Gerald (Gast)


Lesenswert?

Hallo Forum,
ich habe den Thread gefunden, da ich auch auf der Suche bin, Daten aus 
den Modulen/dem Bus auszulesen zu können und idealerweise in meinen 
ioBroker oder sonstiges einzubinden. Zur Zeit laufen bei mir eine 
ioBroker Instanz und 2 Homebridge Instanzen. Hintergrund ist, dass die 
Heizung PMX150 seit einiger Zeit verrückt spielt, mir aber niemand 
wirklich weiterhelfen kann. Vielleicht kann ich ja auf diese Art und 
Weise herausfinden, ob bzw. welches Teil der Anlage nicht richtig 
arbeitet oder nicht richtig eingestellt ist.
Meine Heizung besitzt 2 UML-C1 Module (1xHeizkörper, 1xFubo) mit jeweils 
einem FB5210 Bedienteil, daneben befindet sich ein leerer Einschub.
Wäre für weiterführende links zu benötigter Hardware/Software sehr sehr 
dankbar...
Danke schon mal im voraus
Gerald

von Georg (Gast)


Lesenswert?

Hallo Daniel
Hast du diese Schnittstelle noch? Kann ich sie dir abkaufen? Bitte um 
Antwort.
Lg

von Felix (Gast)


Lesenswert?

Roman B. schrieb:
> Hallo Zusammen,
>
> leider habe ich mit dem Adapter noch nicht geschafft... Mein Urlaub war
> zu kurz.
> [...]
> Viel Spaß,
> Roman

Hi Roman,

ich habe Deinen ioBroker Adapter für meinen BioWin2 Kessel installiert. 
Die Verbindung der Instanz zum Kessel klappte sofort und alle 
Datenobjekte wurden angelegt. Super!
Ich habe aber den Effekt, dass die Werte vom Kessel in ioBroker nur 
aktualisiert werden, wenn ich vorher einmal die myComfort App öffne oder 
vorher den Wert direkt auf der Webpage des Kessels vorab einmal aufrufe. 
Wie ist dieser Effekt zu erklären? Für die VIS sollte ioBroker selbst 
regelmäßig die Werte in der Steuerung aktualisieren und abrufen. Habe 
ich einen Schritt in der Einrichtung vergessen?

Danke für die tolle Arbeit, hoffe auf einen Tipp 🙂
Viele Grüße
Felix

von Manfred S. (Firma: Manfred) (xfred343)


Lesenswert?

Ich würde die Spezialisten aus dem Mail-Betrag bitten, mir alle 
Unterlagen zum LONBUS, openLDV etc. zu senden, mir fehlen noch ein paar 
Puzzlesteine im CNIP-Protokoll bzw. Layer 2, gern auch per p.M.

Danke

von Helmut (Gast)


Angehängte Dateien:

Lesenswert?

Hab folgendes bei meiner Bedienungsanleitung gefunden. Wers braucht... 
Parameter & Werte
LG Helmut

von Michael (Gast)


Lesenswert?

Windhager PMX Probleme mit der Hauptplatine.

Hallo,
ich bin bei der Internetrecherche hier auf diese Seite gestoßen.

Nun zu dem Problem, ich habe mir eine 2 Platine auf Reserve gekauft 
welche auch funktioniert hat.

Da ich halt ein neugieriger Menschen bin habe ich den Flashspeicher Mal 
rausgebaut.

Jetzt geht die Platine leider nicht mehr, sie zeigt bei P 1 "0" anstatt 
der "75" Grad an. Auch die Anzeigephasen usw. sind weg.
Funktionieren tut sie allerdings im Handbetrieb.

Frage, habe ich durch den Ausbau des Flashspeichers da was gelöscht und 
kann man das wieder neu programmieren?

Wäre schön wenn mir da vielleicht jemand weiter helfen könnte.

Grüße Michael

von Michael S. (michael_68)


Lesenswert?

Hallo Peter,
ich hoffe dass Sie mir vielleicht irgendwie weiter helfen können.
Ich habe eine Windhager PMX 150 Pelletheizung.
Ich habe mir eine 2 Platine auf Reserve gekauft welche auch funktioniert 
hat.
Jetzt habe ich da den Flashspeicher Mal raus/ getauscht und nun sind da 
denke ich teilweise Daten weg (meine laienhafte Meinung)
Frage an Sie, kann man die irgendwie neu programmieren oder kennen Sie 
jemanden der das kann, ich möchte halt die Platine nicht schon wieder 
entsorgen müssen.😕
Wäre schön wenn Sie mir vielleicht weiter helfen könnten.
Ansonsten Grüße
Michael

von Robert (Gast)


Lesenswert?

Hallo, ich habe 2 x PMX welche über 20 Jahre alt sind.

Da die Kessel leider doch öfters auf Störung gehen wäre mein größter 
Wunsch eine Web App zu haben wo ich die jeweiligen Status des Kessel 
sehen kann. Da Windhager für diesen alten Kessel selber keine 
Möglichkeit einer Anbindung bietet muss selber etwas gebaut werden.

In Bezug auf Mikroelektronik bin ich zwar sehr interessiert aber leider 
unerfahren, meine Vorstellung wäre gewesen beim Steuerungsdisplay 
(Raumthermostat) dort die Daten abzufangen.

Könnt Ihr mir ein Tool bauen (bzw. habt ihr das ja schon?) was ich 
einfach nur irgendwo anhängen muss um damit die Daten auszulesen? 
Aufbauend auf dieses Tool einen Webserver wo man eben die Stats dann 
sehen kann?!

Zahle gerne für eure Hilfe!

LG

von Rene S. (Gast)


Lesenswert?

Hallo an alle. Ich habe einen DuoWin180 und würde den überhaupt erst mal 
gerne Netzwerkfähig machen. Dazu wollte ich mir eigentlich den Webserver 
RC7030 organisieren. Doch den gibt es von Windhager nicht mehr. Dafür 
gibt es jetzt einen Webserver touch. Doch damit tut sich mein 
Installateur irgendwie schwer und Windhager selber will für die Hardware 
und die Installation knapp 1000€ (wovon 420€ schon alleine der neue 
Webserver kostet). Das ist mir aber etwas zu happig. Und an Privatleute 
verkaufen die das Teil ohnehin nicht. Also falls hier irgendjemand 
zufällig den RC7030 noch rumliegen hat und diesen für einen fairen Kurs 
abgeben möchte wäre ich da sehr interessiert daran.

Gruß René

von Fritz R. (friro_63)


Lesenswert?

Michael S. schrieb:
> Hallo Peter,
> ich hoffe dass Sie mir vielleicht irgendwie weiter helfen können.
> Ich habe eine Windhager PMX 150 Pelletheizung.
> Ich habe mir eine 2 Platine auf Reserve gekauft welche auch funktioniert
> hat.
> Jetzt habe ich da den Flashspeicher Mal raus/ getauscht und nun sind da
> denke ich teilweise Daten weg (meine laienhafte Meinung)
> Frage an Sie, kann man die irgendwie neu programmieren oder kennen Sie
> jemanden der das kann, ich möchte halt die Platine nicht schon wieder
> entsorgen müssen.😕
> Wäre schön wenn Sie mir vielleicht weiter helfen könnten.
> Ansonsten Grüße
> Michael

Hallo Michael,

du musst die Platine nach einem firmware update/ flashtausch erneut an 
den LON-Bus binden. Links auf der Platine ist ein Taster, gedrückt 
halten zum Entbinden, erneut drücken zum Binden (genau wie bei den 
anderen Modulen).

Achtung: Wenn Du den Kessel ohne Bindung im Handbetrieb benutzt hängt 
die Kesselpumpe aber immer noch auf dem BUL Modul! Das schaltet die 
Pumpe einfach ab wenn der Speichesollwert (+6K) erreicht ist. Dann 
brennt dein Kessel ohne Kesselpumpe ... Fukushima....

von Marc (Gast)


Lesenswert?

Hallo auch von mir zu dem scheinbar einzigen Thread im WWW, der sich mit 
dem Abgreifen von Daten eines Windhager PMX150 befasst (ja, alte 
Technik, läuft aber).
Da hier mittlerweile nach meinem Verständnis alte (PMX150 mit UML C1), 
neuere (mit UML+) und ganze neue Systeme (BioWin mit Webserver) 
vermischt sind, würde ich gerne :-) nochmal speziell auf die Thematik - 
PMX 150 mit UML-C1 über LON auslesen - kommen.

Ich verstehe, für den PMX150 mit UML-C1 benötigt man
- den XLON-USB Adapter, um physisch überhaupt zugreifen zu können
- nicht die Windhager Service Software, da nur zum Eeprom auslesen etc
- mit dem richtigen Programmcode kann man aber die Daten über den LON 
lesen und schreiben

Jetzt hänge ich nur an dem Thema Programmcode?! Geht dies bereits mit 
den vom XLON-USB Adapter mitgelieferten Windows dll? Linux wäre mir auch 
lieber (falls da jemand etwas gemacht hat), dann könnte man das über 
einen Raspi zur Weiterverarbeitung zur Verfügung stellen.

Kann mic da jemand auf die richtige Spur bringen?

Grüße

Marc

von Peter M. (peter2003)


Lesenswert?

Hallo Marc,
ja, neben dem XLON-USB Adapter und der mitgelieferten Windows DLL 
brauchst du noch eine weitere DLL (zB. aus der Service SW).
Und noch ein Programm, dass dann die Daten ausliest/ändert (von mir, als 
VB.NET zu haben).
Leider gibt es die beiden DLLs halt nur für Windows. Da wird die ganze 
Steuerung des XLON-USB darin abgehandelt.
Da ich keine Source für die XLON-USB DLL habe, wäre es schwierig das 
Ganze auf Linux nachzubauen.

Peter

von Marc (Gast)


Lesenswert?

Hi Peter,

danke für die schnelle Rückmeldung.
Okay, da ich die "weitere DLL" nicht habe und, was im Moment schwerer 
wiegt, keinen WinPC im Ferienhaus laufen lassen möchte nur um die 
Heizung zu schalten, schiebe ich das Thema erstmal für unbestimmte Zeit 
nach Hinten.

Habe aktuell die Betriebsartweiterschalttasten unserer 2 Bedienterminals 
angezapft, so dass ich darüber mit einem Relais einen Tastendruck 
auslöse. Die Relais steuere ich über eine ioBroker Installation auf 
einem Raspi an, die Kamera des Raspis zeigt dabei die Anzeige des 
Bedienterminals. Dann greife ich von Extern über VPN zu.
Ein klassisches "Durch die Brust ins Auge" Setup aber funktioniert 
zumindest, um die Betriebsarten der Heizung durchzuschalten :-)

Und: lieben Dank für dein Angebot der VB.NET Ergänzung!
Grüße

Marc

von Georg H. (g3gg0)


Lesenswert?

Hallo zusammen,

vor geraumer Zeit habe ich eine eigene Platine dafür gebastelt.

Ich hab den Artikel dazu hier veröffentlicht:
https://www.g3gg0.de/wordpress/esp32/mes-wifi-bringing-a-windhager-pellet-heater-online/

Natürlich mit ESP32, MQTT, Grafana etc. und mittlerweile auch 
zusätzlichen Relais um Magnetventile zu schalten.

Gruß,
g3gg0

von Marc (Gast)


Lesenswert?

@g3gg0

Hammer! Habe es gerade angeschaut, Wahnsinn!
Du hast ein fertiges Modul entwickelt, an dem Windhager weder Zeit noch 
Lust hat etwas zumachen.
Klasse!

Werde mir das in einer ruhigen Minute nochmal durchlesen - und sicher 
mit Fragen kommen :-)

Verstehe ich es richtig, dass ich einen freien Steckplatz im PMX 
brauche? Bei mir sind alle drei Felder belegt...

Marc

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

Servus,

Danke für das feedback :)

Ja, du brauchst einen freien Steckplatz. Aber du kannst das auch sicher 
fliegend verdrahten.
Schnapp dir einen ESP32, RS485 transceiver und einen step-down auf 5V.
Dann die LON-Leitungen anzapfen und das sollte auch reichen.
Eigentlich sogar in der "dead-bug"-Methode auf einem ESP32 Devboard 
machbar.

Im Grunde ist das ein einfacher Aufbau. Ich wollte es nur "solide" und 
hab das deshalb als MES-Modul aufgebaut.

Gruß,
g3gg0

von Marc (Gast)


Lesenswert?

Ja, am Ende vom LON Bus einfach dranhängen, das dachte ich auch.
Deinen Schaltplan hatte ich auch schon gesehen, danke!

Muss wirklich mal in Ruhe das anschauen, ob meine Basisfähigkeiten in 
Elektrotechnik ausreichen ;-) Ja, sicher ein Zeit Thema, aber mal 
schauen.
Und dann benötige ich bestimmt noch ein Stück Software, um das ganze in 
MQTT geliefert zu bekommen. Ich kenne zwar den ESP32 prinzipiell, aber 
nicht in der eigenen Anwendung.

Übrigens: Wenn in deinem Block irgendwo der Tag PMX150 oder Windhager 
gesetzt wäre, vielleicht wäre ich früher darauf gestoßen? Weiß nicht, 
warum Tante Google das nicht ausgespuckt hat?!

Marc

von Georg H. (g3gg0)


Lesenswert?

Okay ich hab mal PMX150 reingepackt, sollte dann irgendwann besser 
gefunden werden. Danke :)

Die Software dafür ist auf github. Einfach WiFi-Daten angeben und 
MQTT-Server aktualisieren.
Eigentlich(TM) musst sonst nichts mehr ändern.

Gruß,
Georg

von Marc (Gast)


Lesenswert?

Klasse, danke!
Werde mich damit befassen, wird aber wohl noch ein paar Wochen dauern 
:-(

Marc

von Horst V. (hoschti)


Lesenswert?

Georg H. schrieb:
> Hallo zusammen,
>
> vor geraumer Zeit habe ich eine eigene Platine dafür gebastelt.

Hallo Georg,

da hast Du ja ein Super-Projekt gebaut. Ich hatte auch schon länger mal 
überlegt, die Steuerung der Heizung von außen zugreifbar zu machen. Aber 
mir war bisher der Aufwand, den LON-Bus "zu Fuß" zu beackern dann doch 
immer zu hoch. War ein Mix aus knapper Zeit und Bequemlichkeit. Daher 
Hut ab für die Arbeit. Dein Artikel über den Bau des Moduls ist schon 
klasse. Auch die Elektronik sieht professionell aus. Da juckt es direkt 
in den Fingern, sich da mal ranzusetzen und das nachzubauen. Ich muss 
dann nur noch den Wlan-Teil auf Kabel umbauen, da am Standort der 
Heizung (Keller) kein Wlan mehr ankommt. Aber das sollte dann auch 
machbar sein.

Grüße
Horst

von Georg H. (g3gg0)


Lesenswert?

Hallo Horst,

danke für das Kompliment. Ich finde der Platinenteil hat auch sehr viel 
Spaß gemacht.
Bei den Steckkarten hat man auch gefühlt unendlich viel Platz :)

Wenn du einen Ethernet PHY an den ESP32 hängen willst, sind glaub die
LON-Leitungen (GPIOs 25, 26, 27) im Weg.
Die müsstest dann umlegen auf z.B. 12, 13, 14.

Falls du an einen anderen µC gedacht hast - mit der aufwändigste Part 
war glaub das Bit-Timing.
Die Daten sind Manchester-kodiert und beim Sync-Pattern am Anfang kommen 
manchmal mehr oder weniger Transitionen.

Wäre eigentlich auch gut mit nem kleinen FPGA lösbar - dann wäre auch 
das Empfangen langer Nachrichten fehlerfrei machbar.
Der Arrow MAX1000 ist ein top Teil, sehr empfehlenswert.
Das wäre dann ein ideales USB<->LON Board mit vielen extra IOs :)

Gruß,
Georg

von Thomas (Gast)


Lesenswert?

Absolutely fabulous @g3gg0 !

I have been working on the same thing as you, but you are way ahead of 
me.
I had begun to setup an ESP32 based M5stack with an old MAX1480 RS485 
driver I had laying around, to start decoding the LON-bus.

But now that you have already decoded it, I downloaded your code and 
made some small changes since I have very little knowledge about MQTT, 
Grafana and Pushingbox.

And now it is up and running, I use the LCD of the M5 and also setup a 
small Web-server on the M5 instead, so I can easily access the 
information from the web just for trying out now.

I guess I need to learn about MQTT, Grafana and Pushingbox :)

I have a Windhager Biowin Exklusiv, that I would like to monitor and 
control.

So I am very interested in further exploring the LON-bus protocol and 
all the messages, also how to send messages.

I noticed however I got some strange value on abgastemperatur with your 
code, the result was 1365, when the actual temp was 74, and then the 
same 1365 when the actual temp was 104.

Here is a document I found that lists nv-variables. I have no idea if 
Windhager complies with these, but I guess the do.

https://www.exhausto.com/~/media/Global/Technical%20Documents/Manuals/3005290.pdf

Ciao, Thomas

von Michael L. (michaelleitner)


Lesenswert?

Horst V. schrieb:
>> Hallo zusammen,
>>
>> vor geraumer Zeit habe ich eine eigene Platine dafür gebastelt.
>
> Hallo Georg,
>
> da hast Du ja ein Super-Projekt gebaut.

Also dem kann ich mich nur anschließen - ein tolles Projekt! Ich möchte 
meine Windhager MultiWin 100 Gastherme darüber auslesen, habe genau wie 
du noch einen Steckplatz in der Regelung frei.

Nachdem ich eher der "Softwerker" bin, wollte ich die Platine schon 
bestückt bei JLCPCB bestellen, leider scheitert es daran, dass manche 
Bauteile wie z.B. der TPS2113APWR im Moment nicht verfügbar sind.

von Thomas (Gast)


Lesenswert?

TPS2113APWR is available here ;)

But only 67 left, you better hurry up ;)

https://www.arrow.com/en/products/tps2113apwr/texas-instruments

von Thomas (Gast)


Lesenswert?

BTW, I hooked my MAX1480 up on a plain breadboard, attached it to the 
M5Stack and to LON-bus "Phoenix"-type connectors inside the burner. Very 
simple and works like a charm.

I power the M5Stack from a normal USB-charger/adapter.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Here's my very simple setup, see attached photo.

von Georg H. (g3gg0)


Lesenswert?

Servus,

freut mich dass es euch hilft. Stell aber bitte sicher, dass das pinout 
zu deiner Anlage passt :)
Ich habe keine Ahnung ob es hier relevante Unterschiede gibt und etwas 
abrauchen kann.
Ich glaub zwar nicht, aber im Zweifel dann doch lieber erst mal von Hand 
aufbauen und nur LON anzapfen.

Der genannte TPS2113 ist mit das Unwichtigeste auf dem Board, kannst 
also
getrost weglassen und pins 6-8 Brücken.
Ich hab ihn als Sicherheit mit drauf, dass der onboard 5V step down 
nicht meinen Laptop mit Strom speist, falls hier mal
paar hundert mV unterschied wären.


@Thomas:
I assume you can read german, being on the forum here? If not, just 
tell.

Super, dass das bei dir geklappt hat.
Bin mir aber nicht sicher ob die NV Variablen deckungsgleich sind.

Ich empfehle dir, mit Wireshark und dem dissector, den ich auch in 
meinem blog habe,
die ganzen Nachrichten mitzulesen und den dissector etwas zu erweitern.
Per default werden alle LON-Botschaften auf port 3333 an die 
broadcast-Adresse 192.168.1.255 geschickt.
LON.ino:8 const char * udpAddress = "192.168.1.255";


Ich glaub ich stelle den auch in ein repository, dann kannst du deine 
Änderungen auch mit einpflegen. (wenn du möchtest)

Gruß,
Georg

: Bearbeitet durch User
von Georg H. (g3gg0)


Lesenswert?

> https://github.com/g3gg0/LonDissector

I added the wireshark dissector here.

von Thomas (Gast)


Lesenswert?

Hi Georg

Great thanks!

I had to swap all IO's to fit the M5stack, but that was the easy bit ;)

One quick question finally for tonight.

Does your software broadcast all LON-messages to wifi 192.168.1.255 as 
it is setup now?

So I can just setup your wireshark LUA and go?

That is, again, fantastic if so!

Oh yes, I read german, sehr slecht, aber mit Google translate alles get 
:)

Bis morgens :)

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

Yes, it's automatically broadcasting all received packets.

If you send a LON frame in an UDP packet to <esp-address>:3334 (or even 
broadcast), then the firmware will send that frame raw on the LON bus.

Using that in a C# software to poll all NVs of a given address (10, 11 
or 60 in my case)

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

Für die C# hacker.

Das ist der EXPERIMENTELLE C# code, mit dem ich die NVs testweise 
visualisiert hab.
Sehr hässlich, dessen bin ich mir bewusst :)

Nächster Schritt - sauber in Klassen kapseln:
 - network layer
 - device instance
 - visualization

Noch ein quick'n'dirty Form1.cs code

von Georg H. (g3gg0)


Lesenswert?

Anderes Thema:

Ich parse aktuell die NV-IDs, deren Name und den Datentyp aus der 
PMX_A3_V270.XIF, die ich mal gefunden hab.
(Firmware version v2.70 mit den notwendigen Extradaten)

Weiss jemand, ob diese Datei auch irgendwo für ein UML C1 verfügbar ist?
Oder hat jemand Firwmare für andere für Modelle?

Gruß,
Georg

von Michael L. (michaelleitner)


Lesenswert?

Herzlichen Dank Georg und Thomas!

Ich werde wie vorgeschlagen "klein" anfangen - nun warte ich auf den 
RS485 Chip.

Ich habe selbst auch ein UML C1 und ein WVF wie Peter viel weiter oben 
im Thread. Mit dem hattest du wahrscheinlich schon Kontakt Georg?

LG Michael

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Great little LUA-script :)
I ran Wireshark and got the attached log.
I have sources 2, 10, 60 and 90 in my system.

I am getting quite a lot of messages with Error code: 2 (Bit time too 
short)

Messages with source 90 always have destination 60.
There are some few source 60 with destination 90 and some with 
destination 127 that reports a RESPONSE, network variable fetch and a 
value, but most messages with source 60 has no destination. Those 
reports the Kessel temperature.

Src 10 sends four different messages
Date/time,  (no destination)
Aussen temp,  (no destination)
Vorlauff soll HK temp,  (no destination)
RESPONSE, Network variable fetch, (destination 127)

None of the messages between 60 and 90 decodes the TPDU (not 
implemented).

Messages with Src: 2 reports as UNKNOWN, but there are only three 
different messages that re-occur:
Selector: 24, 96 or 128,
Value: 00, 7fff or 01 respectively

So I assume the Src address matches the following
Main PCB, Src: 60
Display, Src: 90 (?)
UML C1 module, Src: 10
WVF module Src: 2 (?)

I guess it should be possible to get quite some further info by 
analyzing the traffic while operating the display to read out different 
info and to set various stuff to send messages from the display to 
request certain info. But I am not at the burner right now so this is 
what I could get remotely.

von Thomas (Gast)


Lesenswert?

Hello again

I could see from the system report I have around 40% CRC Errors. I might 
need to check up my physical connection to the LON-bus, or investigate 
if I have something else causing poor signal integrity.

I got some help scrolling through the information on the boiler display 
while I was logging with wireshark, it definitely generated a lot of 
unknown requests and failed responses, so I guess that should be able to 
generate som good info to add going forward.

But more on that tomorrow.

I guess ID 127 is the ESP-module, and the responses I see without 
requests sent to 127 are responses to requests from the ESP32?

And this is where the ID is set in the ESP32 code?

RMT.conf_ch[channel].conf0.val = 0x01271050;

von Georg H. (g3gg0)


Lesenswert?

Thomas schrieb:
> I could see from the system report I have around 40% CRC Errors. I might
> need to check up my physical connection to the LON-bus, or investigate
> if I have something else causing poor signal integrity.

Uh thats bad,
1
Message type: 1 (System report)
2
Bit length 0 min:    62(3,10us)
3
Bit length 0 avg:    252(12,60us)
4
Bit length 0 max:    360(18,00us)
5
Bit length 1 min:    361(18,05us)
6
Bit length 1 avg:    511(25,55us)
7
Bit length 1 max:    799(39,95us)
8
Packets received:    13778181
9
Packets CRC Errors:  7834 (0,06%)
10
Free heap:           231576
11
Max heap:            321324
12
Free PSRAM:          0
13
Max PSRAM:           0
14
Startup time:        25.11.2021 12:17:42
15
Statistics start:    25.11.2021 12:21:09
16
Ignites/24h:           11
17
   Time:     00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23
18
   Ignites:  00 00 00 00 00 01 00 01 00 01 00 00 01 01 01 00 01 01 01 00 00 01 00 01
19
Temperature:           41,00

So there is really something odd

> I guess ID 127 is the ESP-module, and the responses I see without
> requests sent to 127 are responses to requests from the ESP32?
>
> And this is where the ID is set in the ESP32 code?
>
> RMT.conf_ch[channel].conf0.val = 0x01271050;

LON.ino:627    uint8_t nvVarCommand[] = 
"\x01\x19\x01\xFF\x01\x80\x54\x0D\x73\x00";
that \xff is a \x80 OR \x7F, where \x7F is the source address.
I think in the receiving code I do not check the destination address,
so you should be able to change it if you need to.

von Thomas (Gast)


Lesenswert?

Hmmm this is very strange, it looks like I have a much narrower 
variation in bit length than you do.

My variation is 0,6 us and 0,8us
While yours is about 15 us and 12 us. Which is a full bit length at 
78kbaud, which is also a bit strange I think.

Still 100% of my errors are "Bit time too short"
With a min bit length of 12,55us there should be no "Bit time too 
short", right?

Bit length 0 min:    251(12,55us)
Bit length 0 avg:    251(12,55us)
Bit length 0 max:    263(13,15us)
Bit length 1 min:    508(25,40us)
Bit length 1 avg:    509(25,45us)
Bit length 1 max:    524(26,20us)
Packets received:    117
Packets CRC Errors:  53 (45,30%)


Message type: 2 (LON Frame)
Error code:   2 (Bit time too short)
Bits sampled: 20
Bit duration: 511(63,88us)

von Georg H. (g3gg0)


Lesenswert?

Yeah your values look okay.
Maybe some other disturbances?
Would be interesting to see with a scope.

I posted the statistics for more than two months of packets.
And as there are known "bugs" like long packets being troublesome, these 
statistics may come from these.

von Thomas (Gast)


Lesenswert?

There is something strange going on. Everytime this error is reported, 
the duration is 1 tick (0,05 us), while LON_0_MIN require minimum 60 (3 
us).

von Thomas (Gast)


Lesenswert?

Well, sometimes sloppiness causes extra unnecessary work.
If you look closely at the photo of my breadboard above, you will notice 
I forgot to add power line capacitors. Now it works fine :)

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

Yeah one tick is a bit low.
Thats the reason why it signals a corrupted packet.

Ich hab mittlerweile die C# sourcen überarbeitet und eine GUI gebastelt.
Leider erst mal hardcoded auf 192.168.1.255 als Adresse. (bis ich einen 
Optionsdialog einbaue)

Zwei Features:
 - Passiver Device Scan (die Lupe), dann rechtsklick auf ein device zum 
aktiven scannen
 - Aktiver NV Scan (das Plus), ein Gerät (hardcoded 10, 11 und 60) aktiv 
scannen

https://g3gg0.magiclantern.fm/LON/

: Bearbeitet durch User
von Thomas (Gast)



Lesenswert?

Ok, now I am getting somewhere.

Attached is a request from the display for operating hours and the 
response from the main board. Reported operating hours on the display is 
38426 hours.

And the response has the payload 0x961a which equals 38426 :)

Now all I need to do is go through all the rest, and learn how to get 
everything into the sw :)

von Georg H. (g3gg0)


Lesenswert?

ok update the dissector, it will show the payload now (hopefully)

von Thomas (Gast)


Lesenswert?

It says now "Generic application message #11"
And then shows 010B961A

Where I believe the 010B is a message info rather than the parameter 
requested.

I noticed the request is 020B, and then the response is 010B.

I have seen several requests where the request "payload" is 02nn and the 
response is always 01nn. Where nn is the same in both, so I guess nn is 
what specifies which parameter is requested, and responded.

von Michael L. (michaelleitner)


Angehängte Dateien:

Lesenswert?

Hallo Georg

nochmals - herzlichen Dank für deine unglaubliche Arbeit, sowohl für den 
ESP-Code als auch den Dissector.

Ich konnte nun erste Werte vom LON-Bus abgreifen. Spannend sind für mich 
auch die NVs von Source 2 - ich nehme auch an, dass das das WVF ist.

Georg H. schrieb:
> Ich hab mittlerweile die C# sourcen überarbeitet und eine GUI gebastelt.
> Leider erst mal hardcoded auf 192.168.1.255 als Adresse. (bis ich einen
> Optionsdialog einbaue)
>
> Zwei Features:
>  - Passiver Device Scan (die Lupe), dann rechtsklick auf ein device zum
> aktiven scannen
>  - Aktiver NV Scan (das Plus), ein Gerät (hardcoded 10, 11 und 60) aktiv
> scannen

Könntest du bitte gelegentlich die IP-Broadcast-Adresse änderbar machen 
und das Device 2 ergänzen?

Dankeschön!

lg Michael

von Georg H. (g3gg0)


Lesenswert?

Hab das Tool aktualisiert.

Beim Start erstellt er jetzt ein config file. Bitte das editieren.
Hier kannst du die broadcast (*) IP ändern und auch die NVs des WFV 
anpassen,
sollte ich da ein Feld oder einen Typ falsch definiert haben.

Hab von dem die Infos zugeschickt bekommen: (danke!)
1
SW Name        = WVF
2
SW Version     = V 3.51
3
SW Date        = 20.01.03


(*) Kommunikation scheint wirklich nur per broadcast zu klappen.
Muss ich mir mal genauer ankucken, dachte eigentlich das geht auch wenn 
man die IP direkt nutzt.

EDIT:
Wie sehen deine Statistiken so aus?

: Bearbeitet durch User
von Michael L. (michaelleitner)


Lesenswert?

Guten Abend,

Georg H. schrieb:
> Wie sehen deine Statistiken so aus?
1
    Frame Info
2
        Message type: 1 (System report)
3
        Bit length 0 min:    60(3,00us)
4
        Bit length 0 avg:    251(12,55us)
5
        Bit length 0 max:    358(17,90us)
6
        Bit length 1 min:    362(18,10us)
7
        Bit length 1 avg:    511(25,55us)
8
        Bit length 1 max:    798(39,90us)
9
        Packets received:    5569
10
        Packets CRC Errors:  248 (4,45%)
11
        Free heap:           249632
12
        Max heap:            336792
13
        Free PSRAM:          0
14
        Max PSRAM:           0
15
        Startup time:        15.01.2022 21:47:11
16
        Statistics start:    15.01.2022 21:47:14

Was aber merkwürdig ist: Ich sehe im Wireshark die REQUESTs für NVs - 
aber es kommt nie ein RESPONSE?

Danke und lg
Michael

von Georg H. (g3gg0)


Lesenswert?

Hallo zusammen,

ich hab die sourcen mal aufgeräumt und hochgeladen:
https://github.com/g3gg0/LonScan/

Hier das aktuelle test binary:
https://github.com/g3gg0/LonScan/releases/tag/v0.1.0

Inhaltich nichts neues glaub ich.
Der Netzwerk-Code ist aber deutlich sauberer geschrieben.

von Thomas (Gast)


Lesenswert?

Hallo!

I have been working intensely on my system, when I have time to spare.

I am now analyzing the bus on my Biowin, and it seems the data 
transferred on it does not follow any of the data in anything reported 
so far, except for the LON-protocol of course. But none of the data I 
have extracted matches the addressing and NV's I've seen.

I have extracted most of the information that is available in the Info 
section of the Biowin control display, and some of the stuff in the 
Operator and System menu.

I am working on setting up a web-server on the ESP32 that will report 
the data, and will also offer to adjust some settings.

I will use a setup that doesn't require any specially made electronics. 
Just two parts that can be bought for a low cost online and connects 
directly to the LON-bus in the burner.

I'll keep you updated on my progress.

von Thomas (Gast)



Lesenswert?

Thank you Georg for the update LONScanner and the source.

I see that the scanner reports one value for, for instance, NV 23.
But when I filter on NV23 in messages from Src 60 to Dest 90 in 
Wireshark on my system, I get at least 6 messages with different types 
of payload. One of those is the current "Leistung", another one is the 
Burner model, in my case 150, and it is reported in ASCII charactares so 
can actually be read in the ASCII column. It is the only data so far I 
have found being reported in the ASCII format.

Then there are some that I have not decoded yet, but I am pretty sure 
two of them are the auger feed, actual and range. I just need to figure 
out how the data in them are coded.

But nevertheless, it seems like there are several different types of 
data reported under the same NV number. I'll attach a wireshark file to 
this message so you can have a look.

Third packet is Leistung, reporting 100%
Forth packet is Model, reportin 150

von Thomas (Gast)


Lesenswert?

BTW, one of the most interesting things to find out, is of course 
information about the different alarms in the system.

Does anyone have any information on those?

von Thomas (Gast)


Lesenswert?

And now I noticed it looks like I get the same parameter reported under 
different NV's as well.

Like the Leistung 100% is reported both on NV 22 and on NV 23

I made a quickie and included the two hex-dumps for those two packets.

0000   ff ff ff ff ff ff 24 6f 28 8f cf 50 08 00 45 00
0010   00 30 02 54 00 00 ff 11 34 f5 c0 a8 01 24 c0 a8
0020   01 ff ea 42 0d 05 00 1c 10 15|02 00 70 00 00 02
0030   00 19 01 bc 01 da 54 22 0b 01 0a c8 94 48
                            ^           ^
                            nv         100%

0000   ff ff ff ff ff ff 24 6f 28 8f cf 50 08 00 45 00
0010   00 30 02 5a 00 00 ff 11 34 ef c0 a8 01 24 c0 a8
0020   01 ff ea 42 0d 05 00 1c 66 43|02 00 70 00 00 02
0030   00 19 01 bc 01 da 54 23 0b 01 0a c8 3e 19
                            ^           ^
                            nv         100%

As you can see above the whole LON packet (starting at |02 looks the 
same, except for the NV nr and the CRC.

I am under the impression that it is the 0b 01 0A sequence that relates 
to what parameter is in a packet.

von Thomas (Gast)


Lesenswert?

Sorry, what I noted as NV above is not NV, it is the TPDU Type and 
Format.
and the 2 and 3 and 22/33 is the Trans_no.

It is not any NV at all that is being sent in those messages. It is just 
a TPDU including and APDU only as far as I have understoond, up to now.

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

https://pdf4pro.com/view/lontalk-protocol-specification-enerlon-56e8cc.html

There you can find the protocol specification.
See the last page, it shows all the PDU formats.

Also see a screenshot of a NV publish message parsed with my C# code.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

The thing is, the LONScanner only shows NV's, so that's what I used as a 
base. But I have now realized all this information seems to be 
incorrect, at least in my system. Nothing what is reported in the 
LONScanner actually matches those parameters in my system.

My system seems to be using only the SPDU/APDU generic application 
messages, Request/Response where all information is in the APDU, 
including the type of parameter, and perhaps also the length of the 
packet, but that may also be implied by the parameter type. I have not 
yet analyzed all the parts of those packages as I realized this just 
yesterday.

But I have been able to decode a lot of parameter data from those 
packages now, which is always the last parts of the message. So next 
step will be to try to penetrate the header info of the APDU, which then 
is Windhager, and maybe even Biowin specific. I will see if I can get 
some time tonight to look into that.

Attached is a screenshot of a LONScan of my system.

von Thomas (Gast)


Lesenswert?

Here is a direct download link of the protocol specification, without 
hassle ;)

https://web.archive.org/web/20210724071017/http://www.enerlon.com/JobAids/Lontalk%20Protocol%20Spec.pdf

von Georg H. (g3gg0)


Lesenswert?

Thanks for the link.
Could not remember where I got my PDF from ;)

Yeah that point was clear.
Just wanted to give hints as you went through manually dissecting the 
payload.

The APDU really just starts with 1 or 2 bytes (depending on the first 
bits, see Figure 10.2)
followed by the payload of that specific NV.

I have a list of NVs for:
 WVF V 3.51
 InfoWIN FW V 2.60
 FireWin V 3.10
 PMX v2.7
 UML C1 V 3.51
 VarioWin (?)

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Ok, so I looked a bit more into the NV's trying to understand them

Attached are two screenshots, one from the LONScanner showing NV 0x0D 
and one from the Wireshark showing the corresponding LON packet, with a 
selector of 272.

A couple of questions

1. How do we know that selector 272 corresponds to Kessel temperature, 
or has that been "reversed engineered from an actual system"?

2. How do we know that selector 272 corresponds to NV 0x0D?

There are some Parameter/NV-lists around for some Windhager burners and 
"nodes" like firewin, variowin and UML C1 or WVF, as above in the thread 
as well, and as I understand the lists differ from product to product. 
Where do these lists come from or how are they extracted? Can I find or 
generate one for my Biowin?

In the analysis of my system I have noticed Requests from the Infowin 
are sent as SPDU/APDU Requests and responded in the same way, not using 
the NV index or selector. There are also some less frequent TPDU 
messages with specified destinations.

von Thomas (Gast)


Lesenswert?

Thanks Georg for the help and support.

I have now looked more deeply into the ESP32 code and started adding 
code for sending and receiving generic application messages, as I have 
found how to retreive many of the parameters I am looking for that way.

Right now things are presented via a webserver on the ESP, so it's easy 
to add stuff and get some debug info remotely as well.

von Georg H. (g3gg0)


Lesenswert?

> How do we know that selector 272 corresponds to Kessel temperature,
> or has that been "reversed engineered from an actual system"?

Got a lot of information from another user, that helped
in understanding how that stuff generally works.
As it is already a few years back, I fear that I mix up a bit.
(especially the terms)

But basically what I remember was:
I got information for an other windhager device (VarioWin) which NV 
selector for these broadcasts have which meaning.
Also got text files that explained the NV ID (for the request via SPDU) 
have what meaning.
(e.g. a PMX_A3_V270.XIF file)

And matching the exact NV Selectors against the NV ID I did via 
comparing values.
Not sure how much (if any) was already matching and how much I had to 
find on my own.
As I usually do things from scratch, It was still quite a lot.

von Georg H. (g3gg0)


Lesenswert?

Thomas schrieb:

> There are some Parameter/NV-lists around for some Windhager burners and
> "nodes" like firewin, variowin and UML C1 or WVF, as above in the thread
> as well, and as I understand the lists differ from product to product.
> Where do these lists come from or how are they extracted? Can I find or
> generate one for my Biowin?

These are the ones I also got.
Wonder if someone has some more .XIF files.

> In the analysis of my system I have noticed Requests from the Infowin
> are sent as SPDU/APDU Requests and responded in the same way, not using
> the NV index or selector. There are also some less frequent TPDU
> messages with specified destinations.

Yeah, you can "wait" for a broadcasted APDU or query it via SPDU.

I just remembered that you also can read the NV config from the device.
The "ID" I mentioned before is just an "entry number 0 to n" and the 
device
has a table that contains various information.

Here is the result that I got right now for this test on a PMX150:
1
 0# nviRequest       | Prio: 0, Dir: Incoming Selector:    0 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
2
 1# nvoStatus        | Prio: 0, Dir: Outgoing Selector:    1 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
3
 2# nviTimeSet       | Prio: 0, Dir: Incoming Selector:  256 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
4
 3# nvoFileDirectory | Prio: 0, Dir: Outgoing Selector:    3 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
5
 4# nvoTime          | Prio: 0, Dir: Outgoing Selector:    4 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
6
 5# nviObjEvent      | Prio: 0, Dir: Incoming Selector:    5 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
7
 6# nvoObjStatus     | Prio: 0, Dir: Outgoing Selector:    6 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
8
 7# nvoError         | Prio: 0, Dir: Outgoing Selector:  257 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 0
9
 8# nvoWvEnergyHold  | Prio: 0, Dir: Outgoing Selector:   17 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 2
10
 9# nvoBwEnergyHold  | Prio: 0, Dir: Outgoing Selector:   19 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 2
11
10# nviWE_ModeGp1    | Prio: 0, Dir: Incoming Selector:  129 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
12
11# nviWE_ModeGp3    | Prio: 0, Dir: Incoming Selector:  134 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
13
12# EH_m             | Prio: 0, Dir: Incoming Selector:   12 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
14
13# WET_nviTsoll[0]  | Prio: 0, Dir: Incoming Selector:   16 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
15
14# WET_nviTsoll[1]  | Prio: 0, Dir: Incoming Selector:   18 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
16
15# WET_nvoTist      | Prio: 0, Dir: Outgoing Selector:  272 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 0
17
16# BD_nviDsp        | Prio: 0, Dir: Incoming Selector:   16 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
18
17# GB_nviNsoll      | Prio: 0, Dir: Incoming Selector:   17 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
19
18# GB_nvoNist       | Prio: 0, Dir: Outgoing Selector:   18 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
20
19# GB_nvoNsoll      | Prio: 0, Dir: Outgoing Selector:   19 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
21
20# GB_m             | Prio: 0, Dir: Incoming Selector:   20 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
22
21# FS_nviMsoll      | Prio: 0, Dir: Incoming Selector:   21 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
23
22# FS_nvoMotor      | Prio: 0, Dir: Outgoing Selector:   22 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
24
23# FS_nvoTein       | Prio: 0, Dir: Outgoing Selector:   23 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
25
24# FS_nvoTaus       | Prio: 0, Dir: Outgoing Selector:   24 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
26
25# FS_nvoMpts       | Prio: 0, Dir: Outgoing Selector:   25 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
27
26# FS_m             | Prio: 0, Dir: Incoming Selector:   26 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
28
27# FS_nviMfoerder   | Prio: 0, Dir: Incoming Selector:   27 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
29
28# FS_nvoAvgTb_Tk   | Prio: 0, Dir: Outgoing Selector:   28 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
30
29# ZG_nviOn         | Prio: 0, Dir: Incoming Selector:   29 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
31
30# ZG_nvoHeat       | Prio: 0, Dir: Outgoing Selector:   30 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
32
31# ZG_nvoVent       | Prio: 0, Dir: Outgoing Selector:   31 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
33
32# RO_nviCount      | Prio: 0, Dir: Incoming Selector:   32 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
34
33# RO_nvoCount      | Prio: 0, Dir: Outgoing Selector:   33 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
35
34# RO_m             | Prio: 0, Dir: Incoming Selector:   34 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
36
35# PMX_nviLstg      | Prio: 0, Dir: Incoming Selector:   35 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
37
36# FMF_nvoStatus    | Prio: 0, Dir: Outgoing Selector:   36 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
38
37# PMX_nvoLstg      | Prio: 0, Dir: Outgoing Selector:   37 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
39
38# PMX_m            | Prio: 0, Dir: Incoming Selector:   38 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
40
39# PMX_nvoToPzs     | Prio: 0, Dir: Outgoing Selector:  138 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 0
41
40# PMX_nviFromPzs   | Prio: 0, Dir: Incoming Selector:  139 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
42
41# PMX_nviPzsStatus | Prio: 0, Dir: Incoming Selector:  140 (Bound  ) Turn: 0 Service: 2 Auth: 0 AddrTbl: 15
43
42# PMX_eeBetrStd    | Prio: 0, Dir: Incoming Selector:   42 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
44
43# PMX_eeNbrAnhz    | Prio: 0, Dir: Incoming Selector:   43 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
45
44# EXT_m            | Prio: 0, Dir: Incoming Selector:   44 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
46
45# EXT_nvoTacho     | Prio: 0, Dir: Outgoing Selector:   45 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
47
46# EXT_nvoTacho1    | Prio: 0, Dir: Outgoing Selector:   46 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
48
47# NIC_nvoValue     | Prio: 0, Dir: Outgoing Selector:   47 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
49
48# NIC_nvoTboard    | Prio: 0, Dir: Outgoing Selector:   48 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
50
49# NIC_nvoAvgVal    | Prio: 0, Dir: Outgoing Selector:   49 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
51
50# TK_nviSetP       | Prio: 0, Dir: Incoming Selector:   50 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
52
51# TK_nvoPID        | Prio: 0, Dir: Outgoing Selector:   51 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
53
52# TK_nvoTemp       | Prio: 0, Dir: Outgoing Selector:   52 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
54
53# TK_nvoRist       | Prio: 0, Dir: Outgoing Selector:   53 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
55
54# RG_nviSetP       | Prio: 0, Dir: Incoming Selector:   54 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
56
55# RG_nvoPID        | Prio: 0, Dir: Outgoing Selector:   55 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
57
56# RG_nvoTemp       | Prio: 0, Dir: Outgoing Selector:   56 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
58
57# TVB_nvoValue     | Prio: 0, Dir: Outgoing Selector:   57 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
59
58# HW_nviDigInput   | Prio: 0, Dir: Incoming Selector:   58 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15
60
59# HW_nviDigOutput  | Prio: 0, Dir: Incoming Selector:   59 (UnBound) Turn: 0 Service: 0 Auth: 0 AddrTbl: 15

As you can see, the ID 272 matches "15# WET_nvoTist" and 257 matches "7# 
nvoError".
Thats also a possibility to get the mapping.

Will add this as a GUI in my tool the next days. First without the 
possibility to edit ;)

von Georg H. (g3gg0)


Lesenswert?

Ahhh cool. Now i know how to set the current time.
Just broadcast it as network variable 0x100.
So simple... Wanted to have this for years now.

Good that we talked about that.

von Thomas (Gast)


Lesenswert?

Great, thanks!

But how did you read this list?

von Georg H. (g3gg0)


Lesenswert?

See the chapter 11.7.8.
Instead of query nv by index, i query nv cfg with command 8

von Georg H. (g3gg0)


Lesenswert?

Ich habe die Zeit der PMX und der beiden UML gesetzt indem ich die 
network variable 0x100 entsprechend gesetzt hab.
Die jeweiligen Geräte haben jetzt auch (laut ihrer NV) auch die Zeit 
übernommen. (yay!)

Nur das Bedienmodul - genauen Typ weiss ich jetzt nicht, sieht aus als 
wärs eine Windhager MES D-Bedienmodul FB 5210 - das ja
meinem Verständnis nach eigentlich die ganzen Vorgänge steuert, hat die 
Zeiten nicht übernommen.

Jetzt hab ich noch auf haustechnikdialog was gefunden, wie das Protokoll 
aussieht.

Weiss jemand ob diese Bedienteile per Routing am LON erreichbar sind 
oder ist das was freifliegendes?

Ansonsten muss ich mal schauen ob die UML was in der routing table 
stehen haben :-/

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

Ok, so when I send the command 8 I get the selector and config table 
index, but how/where do I get the table itself so I can map these 
values?

I tried some memory reads to see what I could find, but nothing sensible 
in the first few tries.

von Thomas (Gast)


Lesenswert?

Or do they refer to the SNVT Master list?

von Georg H. (g3gg0)


Lesenswert?

No, there is a table in the neuron chip i posted above.
It has indices 0 to e.g. 55 which are the "NV Index" value we used to 
fetch with the SPDU.

In this table it is written if this index is published on the bus.
Either if this node should send this index or if it should listen to and 
fill the value of this NV with that data.

Also encoded there is the "NV Selector" that is being used.
And that selector is the one you see in the "broadcasted" NV messages.

von Georg H. (g3gg0)


Lesenswert?

Okay,

habs geschafft aus dem service tool alle .xif zu entpacken - sind 64 
Stück.
Jetzt muss ich wohl einen Parser dafür schreiben um mir daraus die 
config zu ziehen.

Dann werden alle hoffentlich alle Modelle unterstützt.

von Thomas (Gast)


Lesenswert?

Hi

Which service tool is this?
Is there an .XIF file for the Biowin? Could you please make it available 
to me?
Thanks!

von Georg H. (g3gg0)


Lesenswert?

Hallo zusammen,

das parsen hat ordentlich geklappt.
https://github.com/g3gg0/LonScan/releases/tag/v0.2.1

Unterstützte Modelle:
1
B-PLM + V 1.00
2
B-PLM + V 2.02
3
B-PLM + V 2.24
4
B-PLM + V 2.40
5
BioWin V 3.22
6
BioWin V 3.60
7
BioWin V 4.53
8
BioWin V 4.54
9
BioWin V 6.24
10
BioWin V 6.60
11
BioWin2 V 1.50
12
BioWin332 V 2.50
13
BioWinXL V 1.22
14
BioWinXL V 5.60
15
EWM-PW01_V110
16
FMF_S_V500
17
FMP_F1_V361
18
FireWin V 3.10
19
FireWin V 4.33
20
FireWin V 6.61
21
InfoWIN_BW_V260_HW2_20090324.XIF
22
InfoWIN_BW_V310_20110127.XIF
23
InfoWIN_BW_V400_20080519.XIF
24
InfoWIN_BW_V450_20110125.XIF
25
InfoWIN_FW2_V410_20110125.XIF
26
InfoWIN_FW_V260_20071022.XIF
27
InfoWIN_FW_V310_20110204.XIF
28
InfoWIN_SW_V260_20090420.XIF
29
JetWin V 1.01
30
KAS + V 1.11
31
KAS + V 1.20
32
LWP V 4.20
33
LogWin V 5.51
34
MB6611_LOP_V104
35
PMX V 2.70
36
SOFU V 1.00
37
SOFU V 1.10
38
SOFU V 1.20
39
SilvaWIN V 3.10
40
UML + V 1.3a
41
UML + V 2.00
42
UML + V 2.30
43
UML + V 2.40
44
UMUMLZ V 1.11
45
UMUMLZ V 1.20
46
VarioWin V 5.00
47
VarioWin V 6.61
48
WFBPK V 1.00
49
WFBPK V 1.16
50
WFBPK V 1.20
51
WVF + V 1.00
52
WVF + V 2.11
53
WVF + V 2.24
54
WVF + V 2.40
55
ZSP_V1.02
56
ZSP_V2.02

: Bearbeitet durch User
von Georg H. (g3gg0)


Lesenswert?

Thomas schrieb:
> Hi
>
> Which service tool is this?
> Is there an .XIF file for the Biowin? Could you please make it available
> to me?
> Thanks!

If its okay, you can read the LonScan.cfg which contains the necessary 
information.

: Bearbeitet durch User
von Michael L. (michaelleitner)


Angehängte Dateien:

Lesenswert?

Hallo Georg,

Georg H. schrieb:
> Hallo zusammen,
>
> das parsen hat ordentlich geklappt.
> https://github.com/g3gg0/LonScan/releases/tag/v0.2.1

deine Arbeit wirklich unglaublich - nun liefert mein WVF auch Werte - 
siehe Screenshot.

Herzlichen Dank!

lg Michael

von Georg H. (g3gg0)


Lesenswert?

Servus,

freut mich dass es klappt! :)

https://github.com/g3gg0/LonScan/releases/tag/v0.2.2

Noch ein Update für die etwas experimentierfreudigeren unter uns.
PacketForge, um pakete selber zu bauen.

Noch muss man die Hex-Daten editieren, aber ich habs vom Grundkonzept so 
gebaut,
dass man später auch irgendwann per Dropdown und Textfelder sich die 
Pakete selbst konfigurieren kann.
Wenn ich Zeit finde das zu implementieren ;)

Gruß,
Georg

: Bearbeitet durch User
von Georg H. (g3gg0)


Lesenswert?

Hat jemand neuere UMLs in seinem setup und würde im PacketForge 
(dropdownmenu rechts neben der textbox) das EBus paket mal ausprobieren?
@Michael vllt?

Wäre interessant ob hier eine Antwort kommt.
Die bytes sind auf "DestinationNode" 10 oder 11 hartkodiert, kann aber 
im Textfeld geändert werden falls notwendig.
Im dump links unten sieht man was das für ein Paket ist, das man gerade 
zusammenschustert.

: Bearbeitet durch User
von Michael L. (michaelleitner)


Lesenswert?

Gerne, aber leider kommt bei mir
1
(Response timed out)

Blöde Frage, wie finde ich die Version meines Moduls raus?
Allerdings habe ich ja ein UML C1 und kein UML + (gibt es da eigentlich 
ein eigenes XIF zum importieren)?

lg Michael

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

Hi

Thanks Georg, really great work and things you are supporting us with!

I am still working on understanding the protocol :)

When I send a Network message request with command 8, APDU Destin&Type = 
0x68,

the response I get has the APDU Destin&Type = 0x28

This is then an application message, not a network message, and the 
thing is, the '2' in 0x28 is then part of the command. Which makes the 
response command = 0x28 (40), but it should be 8

See following references in the Protocol Specification.
1
  10.4 APDU Types and Formats
2
  11.7.8 Query Network Variable Configuration

Here's the Request and the Response NPDU's, excluding CRC
1
19 01 fe 01 bc 54 01 68 02
2
19 01 bc 01 fe 54 21 28 01 00 4f

So, my question is, where does the 2 in 0x28 response Destin&Type come 
from?

It seems to me the response command is 0x28, not 8. But that is not 
consistent with the protocol specification, as far as I can see.

von Georg H. (g3gg0)


Lesenswert?

First, you miss the PPDU header, which is 01. But I guess thats just a 
copy paste issue.
Adding it, we will get this:
1
 01 19 01 FE 01 BC 54 01 68 02
2
3
 Prior                    = no 
4
 AltPath                  = no 
5
 DeltaBl                  = 1 
6
 NPDU                     = LonNPdu
7
   Version                  = 0 
8
   DomainLength             = Bits_8 
9
   Domain                   = 84 
10
   Address                  = LonAddressNode
11
     DestinationSubnet        = 1 
12
     DestinationNode          = 60 
13
     SourceSubnet             = 1 
14
     SourceNode               = 126  
15
   PDU                      = LonSPdu
16
     Auth                     = no 
17
     ReminderLength           = 0 
18
     ReminderMList            = 0 
19
     SPDUType                 = Request 
20
     APDU                     = LonAPduNetworkManagement
21
       Code                     = QueryNetworkVariableConfig 
22
       Data                     = [ 02 ]  
23
     TransNo                  = 1

Response:
1
 01 19 01 BC 01 FE 54 21 28 01 00 4F
2
3
 Prior                    = no 
4
 AltPath                  = no 
5
 DeltaBl                  = 1 
6
 NPDU                     = LonNPdu
7
   Version                  = 0 
8
   DomainLength             = Bits_8 
9
   Domain                   = 84 
10
   Address                  = LonAddressNode
11
     DestinationSubnet        = 1 
12
     DestinationNode          = 126 
13
     SourceSubnet             = 1 
14
     SourceNode               = 60  
15
   PDU                      = LonSPdu
16
     Auth                     = no 
17
     ReminderLength           = 0 
18
     ReminderMList            = 0 
19
     SPDUType                 = Response 
20
     APDU                     = LonAPduGenericApplication
21
       Code                     = 40 
22
       Data                     = [ 01 00 4F ]  
23
     TransNo                  = 1

Now when you check Page 84/112, it says that responses are always 
directed
to the application and have the code 00pxxxxx where p=1 tells the 
operation
was successful.
In your case the xxxxx was 8, which was your original command.

von Thomas (Gast)


Lesenswert?

Sorry, found the answer in another part of the specification.
1
Responses that have been generated by the execution of these NM commands are
2
directed to the Application, as specified by the first byte of the APDU:
3
00pxxxxx
4
The <p> field is set to one if the operation succeeded, or zero if it failed.

von Thomas (Gast)


Lesenswert?

Ah, Georg, Thanks. Yes, finally I found it too ;

I posted the NPDU, not the PPDU, that's why the 01 was missing ;)

von Georg H. (g3gg0)


Lesenswert?

Ah right, you wrote NPDU. Did oversee that.

von Michael L. (michaelleitner)


Lesenswert?

Michael L. schrieb:
> Gerne, aber leider kommt bei mir
>
1
(Response timed out)

Ich habe jetzt die Timeout-Zeit in der cfg-Datei auf 30000 ms gestellt.

dennoch kommt
1
(Response timed out)

bei dem EBus-Befehl.

Die normale NV-Query (mit Destination 10 bei mir, da ich kein 60 habe) 
funktioniert.

von Georg H. (g3gg0)


Lesenswert?

Michael L. schrieb:
> Gerne, aber leider kommt bei mir
>
1
(Response timed out)
>
> Blöde Frage, wie finde ich die Version meines Moduls raus?
> Allerdings habe ich ja ein UML C1 und kein UML + (gibt es da eigentlich
> ein eigenes XIF zum importieren)?
>
> lg Michael

Richtig. Hab auch ein UML C1.
Ich muss nacher nochmal schauen, ich hab aus Versehen das C1 
rausgeworfen.
XIF hatte ich keines, ich hatte das händisch gestrickt

Also die genaue version auslesen, ich hab mir da noch keine Gedanken 
gemacht.
Aber guter Punkt. Das kuck ich nach.

Du hattest ja dein C1 als node 10, so wie das kommando gestrickt war.
Mist. Das heisst per 0x0e kommt man nicht auf den EBus.
Vllt geht das nur mit dem UML+?

Ich will die Uhrzeit der Bedienpanel setzen :(
Dass jede Stunde vom ESP32 die Zeit korrigiert wird, dann hat sich das 
mit der Zeitumstellung erledigt.

von Georg H. (g3gg0)


Lesenswert?

Mit dem Kommando
01 19 01 FE 01 8A 54 0D 6D 00 40 00 10 # read version
kannst die version aus dem flash lesen

Aie Antwortbytes dann im hexeditor betrachten.
1
00 19 01 8A 01 FE 54 24 2D A3 45 4A 56 20 33 2E 35 31 20 20 00 32 30 2E 30
2
 Prior                    = no 
3
 AltPath                  = no 
4
 DeltaBl                  = 0 
5
 NPDU                     = LonNPdu
6
   Version                  = 0 
7
   DomainLength             = Bits_8 (1) 
8
   Domain                   = 84 
9
   Address                  = LonAddressNode
10
     DestinationSubnet        = 1 
11
     DestinationNode          = 126 
12
     SourceSubnet             = 1 
13
     SourceNode               = 10  
14
   PDU                      = LonSPdu
15
     Auth                     = no 
16
     ReminderLength           = 0 
17
     ReminderMList            = 0 
18
     SPDUType                 = Response (2) 
19
     APDU                     = LonAPduGenericApplication
20
       Code                     = 45 
21
       Data                     = [ A3 45 4A 56 20 33 2E 35 31 20 20 00 32 30 2E 30 ]  
22
     TransNo                  = 4

: Bearbeitet durch User
von Georg H. (g3gg0)


Lesenswert?

Servus,

Version auslesen hinzugefügt:
https://github.com/g3gg0/LonScan/releases/tag/v0.3.0
(ich hoffe das ist universell bei Windhager...)

Gruß,
Georg

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

This is what I got when I extracted the 60 first Network Variable 
configurations from the configuration register.
1
NV Selector
2
0 16383
3
1 16382
4
2 256
5
3 16380
6
4 16379
7
5 257
8
6 17
9
7 19
10
8 129
11
9 134
12
10 16373
13
11 16
14
12 18
15
13 272
16
14 16369
17
15 16368
18
16 16367
19
17 16366
20
18 16365
21
19 16364
22
20 16363
23
21 16362
24
22 16361
25
23 16360
26
24 16359
27
25 16358
28
26 16357
29
27 16356
30
28 16355
31
29 16354
32
30 16353
33
31 16352
34
32 16351
35
33 16350
36
34 16349
37
35 16348
38
36 16347
39
37 16346
40
38 16345
41
39 16344
42
40 16343
43
41 16342
44
42 16341
45
43 16340
46
44 16339
47
45 16338
48
46 16337
49
47 16336
50
48 16335
51
49 16334
52
50 16333
53
51 130
54
52 0
55
53 0
56
54 0
57
55 0
58
56 0
59
57 0
60
58 0
61
59 0

von Thomas (Gast)


Lesenswert?

The selector values from the extraction, that is.

von Georg H. (g3gg0)


Lesenswert?

You can read that with the tool, too.

von Georg H. (g3gg0)


Lesenswert?

Bugfix um bei gleichzeitiger Nutzung mehrere Fehnster einen deadlock zu 
verhindern:
https://github.com/g3gg0/LonScan/releases/tag/v0.3.1

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

Hatte die vorherige Nachricht am Handy getippt.
Peinlicher Tippfehler - ich weiss wie man Fenster schreibt :D

Hier eine neue Version, die auch anzeigt, welche NVs input sind (grün) 
und welche output (rot).
Die NetVar Spalte ist der "selector" der NV auf dem Bus.

Im Screenshot sieht man, dass mein UML C1 die NV#04 "Lokale Zeit" 
aktualisiert wird, wenn eine NV mit selector 256 reinkommt.
Und sie schickt die T_Aussen auf NV selector 0 raus (sobald die software 
den Wert zum verschicken markiert)

Mit "00 35 01 FE 01 54 80 00 00 C9" kann man die Temperatur dann auch 
von aussen reinmelden.
So könnte der ESP32 andere Sensoren an euer Busyystem reporten.
Oder andere Temperaturen anfordern ("Meine Frau hat laut Google Kalender 
Frühschicht, für ein warmes Bad schon mal um 04.30 die Vorlauftemperatur 
hochfahren...")

https://github.com/g3gg0/LonScan/releases/tag/v0.3.2

: Bearbeitet durch User
von Michael L. (michaelleitner)


Angehängte Dateien:

Lesenswert?

Bei mir liefert die Versionsabfrage (egal ob über dein Tool oder 
manuell) leider immer einen Bit Phase error.

lg Michael

von Georg H. (g3gg0)


Lesenswert?

Das heisst, bei langen Nachrichten hast ein Leseproblem :(
Dann muss ich mir den ESP32 code mal wieder etwas genauer ansehen und
schauen ob ich da was optimieren kann.

Wie schaut dein Aufbau aktuell aus? Sind da recht lange Drähte im Spiel?
Transceiver nahe am ESP32? Stichleitungen vom LON sind kurz oder 
terminiert?

Gruß,
Georg

von Thomas (Gast)


Lesenswert?

How can I get the NV - Selector mapping read out with the tool? I have 
not found how to do that?

von Georg H. (g3gg0)


Lesenswert?

Download the latest version and select your device.
See my screenshot above - it shows all the fields on the right side.

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

I also get the Bitphase error for the sw version request. But not 
always, it worked one time.

It also gets the product name ok, but does not report it in the sw, 
perhaps because of the bitphase error.

Please see the attached wireshark file.

The product name response is much longer than the sw version response, 
and seems to work fine every time, so it seems the bitphase error is not 
directly related to packet length.

von Michael L. (michaelleitner)


Lesenswert?

> Wie schaut dein Aufbau aktuell aus? Sind da recht lange Drähte im Spiel?
> Transceiver nahe am ESP32? Stichleitungen vom LON sind kurz oder
> terminiert?

noch ist alles auf einem Breadboard - die Leitung vom LON sind ca. 50cm, 
vom Receiver zum ESP sind es noch mal gut 10cm. Meinst du das ist zu 
lange?

Für die Dauerlösung hätte ich ja gerne deine Platine und dass mir JLCPCB 
nicht nur die Platine fertigt, sondern auch gleich fertig bestückt. 
Allerdings ist da ein Start aufgrund von Lieferzeiten frühestens nach 
dem chinesischen Neujahr möglich. Oder hättest du da andere Tipps für 
mich?

Danke und lg
Michael

von Thomas (Gast)


Lesenswert?

The latest version just downloaded and tested.

For the Biowin (90) I get bitphase error, the product name works, but 
nothing is reported in the tool and no data is shown.

For the WVF there is no error, but nothing is reported in the tool and 
no data is shown.

Det WVF is reported as "5.06 WVF" in the packet, and the version is 
reported as V3.52 in the packet. But the LONScanner tool does not report 
anything, the tool window is just epmty.

von Thomas (Gast)


Lesenswert?

Michael, you can check with Aisler, for european made PCB's. I usually 
use them, works great.

von Michael L. (michaelleitner)


Lesenswert?

Thank you Thomas,

I'll check that!

BR Michael

von Thomas (Gast)


Lesenswert?

Ran it one more time now, this time there was no bitphase error, but 
Lonscan still doesn't report anything.

von Georg H. (g3gg0)


Lesenswert?

Servus,

Bei der PCB v1.3 ist mir nicht aufgefallen, dass ein IO-Pin falsch 
gelegt ist.
Man konnte mit der LON nur LESEN, nicht aber senden, was mir bisher 
nicht auffiel.
Darum hab ich auf EasyEDA eine v1.4 veröffentlicht mit einer Korrektur.
Habe die Änderung per Kupferlackdraht auf einer v1.3 nachgebaut und das 
klappt.

Auch hab ich in der Firmware kleine Änderungen vorgenommen.
Es ist zwar nicht so, dass das Grundproblem des ESP32/RMT damit behoben 
ist.
Allerdings habe ich etwas mit den Timings gespielt und es könnte sein, 
dass die Fehlerquote bei größeren Paketen geringer ist.

Änderungen in der Firmware:
 - glitch filter für kurze spikes < 100µs
 - lange Pakete dürften eine höhere chance haben, geparsed zu werden
 - Latenz beim Empfangen vom LON verringert
https://github.com/g3gg0/MESWiFi

Änderungen am LonScanner:
 - Timeout und delays konfigurierbar
https://github.com/g3gg0/LonScan/releases/tag/v0.3.3

Hier ein Video wie es bei mir läuft:
https://www.youtube.com/watch?v=6MgHI1anq8U

Die CRC Fehler sind wahrscheinlich u.a. auch weil ich keine 
Kollisionserkennung drin hab.

: Bearbeitet durch User
von Georg H. (g3gg0)


Lesenswert?

> noch ist alles auf einem Breadboard - die Leitung vom LON sind ca. 50cm,
> vom Receiver zum ESP sind es noch mal gut 10cm. Meinst du das ist zu
> lange?

Das find ich persönlich schon etwas lang aber sollte eigentlich auch 
ohne Terminator klappen. So hoch sind die Raten hier auch nicht.
Vielleicht kommts auch von der Spannungsversorgung.
Der ESP32 zieht beim WiFi Senden schon ordentlich und oft sind die 
falschen
5V -> 3.3V Spannungsregler verbaut. Die wären okay für den ESP8266, beim
ESP32 bricht die Spannung oft etwas ein.

Ich würd mal probieren ein paar kerkos zu platzieren. Beim Transceiver 
und am ESP.

von Thomas (Gast)


Lesenswert?

Here's what happens when I try to use it, 0.3.3

https://youtu.be/gq__Ym3DAQA

von Georg H. (g3gg0)


Lesenswert?

Can you set the timeout to 3000?

von Thomas (Gast)


Lesenswert?

Thanks, that made all the difference :)

I am working on mapping up the same way of getting information out of my 
Biowin the same way as the Infowin (Display) does.

The Infowin requests information from Biowin using the following format

APDU Generic Application Message with code = 0x0B
The next byte is 0x02 = Request
And the following byte is the parameter requested, for instance 0x0A is 
Current Output (Power).

So requesting Power, the NPDU looks like this

 19 01 bc 01 ff 54 27 0b 02 0a c8

The answer follows the same format, but Response is indicated by 0x01 
and then followed by the parameter index, 0x0A for Current Output 
(Power).

Then the parameter data follows which can be "any" number of bytes. 
Apparently it is implied that the receiver knows the amount of data, as 
this is not part of the message.

It is also interesting that there seems to be no connection to Network 
Variables (0x17 for Output Power) or the Selector.

I noticed that the LON Scanner has two columns, NV# and NetVar, the name 
indicating that the columns shows the same thing, but as I understand 
the NetVar actually shows the Selector.

For instance for the Time Setting, the NV is 2, The Selector is 0x100. 
But for Current Output the NV and the selector is the same =0X17.

And here is a question.

I am quite sure that the APDU Request command for the Exhaust 
temperature is

0b 02 09

and the response when the temperature is 90 C is

0b 01 09 0e 3f

Where 0e 3f is the temperature.

However, I have not figured out how 0e 3f converts to 90 C. Or what it 
should be otherwise.

The change in this parameter also seems to follow the change in exhaust 
temp, but to some non linear scale (?), which is strange.

Any suggestions on this.

I'll put together a list of these indexes and publish here when I sorted 
it out.

von Georg H. (g3gg0)


Lesenswert?

> So requesting Power, the NPDU looks like this
>
>  19 01 bc 01 ff 54 27 0b 02 0a c8

(entered the byte sequence in "Packet Forge" to check its content)
1
01 19 01 BC 01 FF 54 27 0B 02 0A C8
2
3
Prior                    = no 
4
AltPath                  = no 
5
DeltaBl                  = 0x01 / 1 
6
NPDU                     = LonNPdu
7
  Version                  = 0x00 / 0 
8
  DomainLength             = Bits_8 (1) 
9
  Domain                   = 0x54 / 84 
10
  Address                  = LonAddressNode
11
    DestinationSubnet        = 0x01 / 1 
12
    DestinationNode          = 0x7F / 127 
13
    SourceSubnet             = 0x01 / 1 
14
    SourceNode               = 0x3C / 60  
15
  PDU                      = LonSPdu
16
    Auth                     = no 
17
    ReminderLength           = 0x00 / 0 
18
    ReminderMList            = 0x00 / 0 
19
    SPDUType                 = Response (2) 
20
    APDU                     = LonAPduGenericApplication
21
      Code                     = 0x0B / 11 
22
      Data                     = [ 02 0A C8 ] "..?"  
23
    TransNo                  = 0x07 / 7

Are you sure that packet was the request?

von Georg H. (g3gg0)


Lesenswert?

> 0b 01 09 0e 3f
>
> Where 0e 3f is the temperature.
>
> However, I have not figured out how 0e 3f converts to 90 C. Or what it
> should be otherwise.

Just a guess - it is SNVT_temp:

0x0E3F = 3647 = 364.7 K - 273.1 K => 91.6 °C

von Thomas (Gast)


Lesenswert?

Sorry, copy-paste error, how did I manage that mistake) ;)
Please disregard from that, it is messed up by me manually somehow.

Here are the Correct packets.
1
Request
2
01 19 01 FF 01 BC 54 07 0B 02 0A 
3
4
Response
5
01 19 01 BC 01 FF 54 27 0B 01 0A C8

von Thomas (Gast)


Lesenswert?

Just a guess - it is SNVT_temp:

> 0x0E3F = 3647 = 364.7 K - 273.1 K => 91.6 °C

Perfect, how stupid of me :) I checked F but totally missed K ;)

Thanks!

von Georg H. (g3gg0)


Lesenswert?

https://github.com/g3gg0/LonScan/releases/tag/v0.3.4

Added latency infos.

It will periodically try to send a packet to itself and check its 
latency.

Please make sure the SourceNode 126 in config file is not used in your 
setup.
If it is used, change it to a free node id.

: Bearbeitet durch User
von Georg H. (g3gg0)


Lesenswert?

Thomas schrieb:

> I noticed that the LON Scanner has two columns, NV# and NetVar, the name
> indicating that the columns shows the same thing, but as I understand
> the NetVar actually shows the Selector.

yes, the left NV# is the "Network Variable's table index".
The NetVar is the "selector" that is used for the Network Variable.

von Georg H. (g3gg0)


Angehängte Dateien:

Lesenswert?

Thomas schrieb:

> I am quite sure that the APDU Request command for the Exhaust
> temperature is
>
> 0b 02 09
>

This reminds me of the DAP requests I found when reverse engineering the 
MES software.

0x0B -> DAP request
0x02 -> DAP Read
0xnn -> DAP ID


0x0B -> DAP request
0x01 -> DAP read response
0xnn.. data

Attached some descriptions from the Report.xml files of the MES 
software.
It does not show all of them, just a few.

von Thomas (Gast)


Lesenswert?

> Attached some descriptions from the Report.xml files of
> the MES software. It does not show all of them, just a few.

Das ist ja super-toll :)

What MES software is that, and how was the Report.xml file generated?
I'd very much like them all :)

von Georg H. (g3gg0)


Lesenswert?

Well the software is not free to get. It requires a license key etc.

von Thomas (Gast)


Lesenswert?

I see now I was a bit unclear, I ment I want all the DAP ID's ;)

So it is the Windhager Service sw then I assume. Do you have a license 
for this? Is it possible to get as private person? There is no longer 
any distributor or reseller of Windhager here in Sweden, and it's hard 
to get any info from anyone outside of sweden as they see me as a 
non-customer.

von Georg H. (g3gg0)


Lesenswert?

Well, i don't know how to get it :)
Which device do you have exactly?

von Thomas (Gast)


Lesenswert?

I have a Windhager Biowin Exklusiv from 2007, or if it was 2005.

It consist of

Firing automate, SW ver 3.22 : Lon bus ID: 60
Infowin (Display), SW ver 2.50 : Lon bus ID: 90
UML C1 (I think): Lon bus ID 10
WVF: Lon bus ID 2

I do not have the FB 5210 indoor controller, but I need to get one to 
get a good control of the system. But maybe now I can manage it with a 
couple of M5Stack instead :)

von Georg H. (g3gg0)


Lesenswert?

The only ones that are listed in the firmware info are:
1
27 Art des Pelletszuführsystem 3 Sonden
2
28 Laufzeit der Saugturbine
3
15 Betriebswahl Pelletszuführung
4
17 Beginn Freigabezeit
5
18 Ende Freigabezeit
6
19 Startzeit
7
20 Betriebswahl Sondenumschaltung

von Michael L. (michaelleitner)


Lesenswert?

<