LAN-Anbindung für BSB-Bus (Brötje, Elco Thision etc.)

Begonnen von justme1968, 29 November 2014, 19:50:40

Vorheriges Thema - Nächstes Thema

postman

Hallo n300,
Ich habe bei mir ein 2 paariges Telefonkabekl verwendet.
Da ich keine Lust hatte, quer durchs ganze Haus ein eines Kabel zu verlegen, bin ich mit dem Telefonkabel bis zur nächsten Telefondose gegangen. Dort habe ich dann die Heizung auf ein freies Aderpaar gelegt. Weiter habe ich dann in einigen Telefonverteilern (Hausverteilung) entsprechend die Doppelader bis zum BSB-LAN durchgeschaltet. Funktioniert ohne Probleme, obwohl DSL und ISDN durch eines der Kabel zwischen den Verteilern geht.
In der Bedienungsanleitung der Heizung szeht bei mir: 1,5 qmm Querschnitt max. ca. 30 m. In der Testphase habe ich ein Telefonkabel vom ca. 110 m verwendet und das Signal kam sauber an.

Gruß
Raspberry Pi Version 2 QUAD-CORE CPU und 1 GB RAM, CUL V3 868 MHz,  stapelbarer CC1101 (SCC) 433 MHz, Enocean-Stick,Jeelink-Stick, BSB-Lanadapter

Spruch eines Ausbilders: Theorie ist, wenn man alles weiss und nichts funktioniert; Praxis ist, wenn alles funktioniert und keiner weiss warum...

n300

Das klingt gut. Ja ich dachte mir eh, dass die großen Querschnitte höchstwahrscheinlich aus Safety Gründen angegeben wurden. Einfach um sicher zu gehen und etwaigen Support-Aufwand niedrig zu halten. Macht ja auch Sinn. Das hier verwendete Signal ist ja auch recht Low-End im Vergleich zu Ethernet. Entsprechend schätze ich auch die Kabelvoraussetzungen ein.

freetz

Zitat von: tiger42 am 21 Juni 2021, 12:12:51
Kurz zusammengefasst: Der Header muss die Adresse(n) (inkl. Protokoll) der Seite(n) enthalten, von wo aus der Request per JavaScript erlaubt sein soll. Dies ist natürlich bei jedem anders, daher müsste jeder für sich den Header im BSB-LAN Code anpassen.

Danke für die Erklärung, ich arbeite aber gerade mit der Schnittstelle des RKI für die Inzidenz-Daten, und die kann ich über JavaScript direkt abrufen:
https://www.inzidenz-tendenz.de/
Das RKI müsste doch dann entsprechend "freigiebige" CORS-Einstellungen gemacht haben, damit das überhaupt geht, oder? Und das wird ja wohl nicht für jede abrufende Adresse neu erstellt...
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

tiger42

Zitat von: freetz am 23 Juni 2021, 15:05:08
Danke für die Erklärung, ich arbeite aber gerade mit der Schnittstelle des RKI für die Inzidenz-Daten, und die kann ich über JavaScript direkt abrufen:
https://www.inzidenz-tendenz.de/
Das RKI müsste doch dann entsprechend "freigiebige" CORS-Einstellungen gemacht haben, damit das überhaupt geht, oder? Und das wird ja wohl nicht für jede abrufende Adresse neu erstellt...
Die Schnittstelle ist wohl nicht durch ein Basic Auth geschützt. In einem solchen Fall kann der Server-Betreiber einfach "Access-Control-Allow-Origin: *" setzen.
Es ist im übrigen tatsächlich ohne großen Aufwand möglich, den Header abhängig vom anfragenden System zu setzen. Sofern der Browser einen "Referer" und/oder "Origin" Header sendet, kann man den serverseitig abfragen und den Access-Control-Allow-Origin Header entsprechend dynamisch setzen. Ist aus Security-Sicht natürlich nur sicherer als "*", wenn man den Header nur für bestimmte als sicher bekannte Quelladressen (Whitelist) so setzt. Das Blöde an dem Header ist nämlich leider: Man kann nur genau einen Origin eintragen, oder eben "*". Keine Ahnung, wer sich sowas ausgedacht hat.  ;)

n300

Guten Morgen Leute,

Ich hätte da noch eine Frage zum Anschluss zur Steuerung. Mein einziger CL+/- am Hauptcontroller ist ja schon vom Bedienteil belegt. Ich weiß, ich könnte mich da parallel dazu hängen. Jetzt hätte ich aber noch ein freies BSB Trio am Sub-Modul AVS75.370 gefunden. Kann ich ich da auch draufklemmen? Ich meine, wenn es ein Bus ist, müsste es doch egal sein, wo mein Entrypoint ist, oder?


freetz

Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

n300

Wunderbar. Hat alles geklappt.
Der Parameterdump ist schon am Weg zu dir :)

n300

Kurze Rückmeldung von mir. Soweit funktioniert alles prächtig. Lässt sich via Node-Red super auslesen, sowie auch beschreiben/konfigurieren.
Einzig mit dem Verhalten, dass der Arduino nicht erreichbar ist, solange ein größere Abfrage läuft, bzw. wenn zufällig zwei Abfragen simultan daher kommen sich zumindest eine ins Aus schießt muss ich noch etwas besser in Griff bekommen.

Was mir hier aufgefallen ist: Bei mir sind offenbar die Parameter 8756 und 8757 genau seitenverkehr. Kann nicht sagen, ob das ne Sonderheit bei meiner Steuerung ist. Denn beim VorlaufHK und VorlaufSollHK passt es, wie es ist.


freetz

Ja, das kann passieren, dass manche Parameter an einer anderen Stelle stehen, als bei anderen Heizungen, wobei ein direkter Tausch eher selten ist. Wenn es also Bedienungsanleitungen gibt, die die bisherige Sortierung belegen, würde ich es so lassen, wie es ist, denn jede Spezialanpassung kostet Speicherplatz. Am Ende schauen nach einer Weile BSB-LAN Nutzung die wenigsten nach den Parameternummern der Heizung, sondern finden anhand der Kategorien die Funktion, die sie einstellen wollen. Sofern es bei der Eingabe dieser bestehenden Parameter keinen Fehler gegeben hat, haben die Einstellungen dann auch die richtige Funktion, d.h., bei Dir an der Heizung würde es dann den dort verwendeten Parametern bzw. der Sortierung zugeordnet werden.

Das mit den Abfragen ist leider so, sowohl der Arduino als auch der ESP unterstützen keine mehrfachen HTTP-Threads (oder ich weiß nicht, wie es geht). FHEM bietet die Möglichkeit verschiedene Intervall-Aufgaben mit etwas Abweichung zu starten, so dass man damit Überschneidungen vermeiden kann. Wie das bei Node-Red aussieht, kann ich nicht sagen.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

Mike_pa

@freetz
Da müßte man so etwas wie ESPAsyncWebServer nehmen (siehe Github). Ob es ähnliches für den DUE mit Ethernet Shield gibt,  weiß ich nicht. Der Aufwand ist sicher nicht unerheblich.

freetz

Danke, stimmt, darüber war ich auch schon mal gestolpert, aber hatte es dann verworfen, weil es für den Arduino nicht passt...
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

n300

Das wegen dem Parameter Swap ist auch kein Problem für mich. Dachte nur ich schreibs mal rein, hätte ja sein können, dass es generell ein Fehler gewesen wäre.

Zu dem Message Queuing hab ich mir im Node Red jetzt was gebastelt, was ganz gut zu funktionieren scheint.

Und zwar verwende ich nu noch einen BSB-LAN Node für alles. Davor hab ich ein simple-queue-Gate gesetzt. Ist die Queue leer wird der erste Request einfach durchgelassen. Darauffolgende werden in der Warteschlange gehalten. Erst wenn der BSB-LAN Node wieder reagiert und mit seiner Arbeit fertig ist, triggert dieser die Queue, damit der nächste wartende Request durch gelassen wird und so weiter...
Damit ich den Return vom BSB-LAN dann zum "Auftraggeber" wieder zuordnen kann, hat jeder Auftraggeber ein eindeutiges msg.topic.

Das ist jetzt soweit stabil, da alle Anfragen unweigerlich seriell zum BSB-LAN geleitet werden. Kann maximal noch sein, dass es spinnt, wenn ich zu nem ungünstigen Zeitpunkt auf der WebUI vom BSB-LAN Adapter rum fuhrwerke und Rechenzeit stehle.

freetz

Sehr schön gelöst, danke für die Beschreibung! @Schotty: Vielleicht wäre ein Link vom Node-Red-Kapitel auf diesen Post sinnvoll?
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/bsb_lan

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

n300

Danke. Ich lass euch mal den Flow da, falls das sonst mal wer brauchen kann.

Werde das jetzt etwas beobachten und eventuell noch ein Errorhandling dazu bauen, wenn ich ne Notwendigkeit dazu bemerke. Meine Idee wäre, bei nem BSB-LAN Timeout die verlorene msg nochmal einzureihen. Mit retry Limit natürlich, damit sichs nicht infinit verläuft.

[{"id":"802de254.ff853","type":"inject","z":"15be78c0.6761c7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"900","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":300,"wires":[["653ee994.fb9e38"]]},{"id":"14ef3f3d.2fcfe1","type":"function","z":"15be78c0.6761c7","name":"calc VorlaufTempKühlen","func":"function round(value, precision) {\n    var multiplier = Math.pow(10, precision || 0);\n    return Math.round(value * multiplier) / multiplier;\n}\n\n//params\nvar minDiffToHighestDewpoint = 2;\nvar minVorlauf = 16;\nvar maxVorlauf = 19;\n\n\n\nvar dewpoints = []\ndewpoints.push(global.get(\"klimadata_Benjamin\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Buero\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Esszimmer\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Gang_EG\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Gang_OG\").dewpoint);\n//dewpoints.push(global.get(\"klimadata_Kinderbad\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Kueche\").dewpoint);\n//dewpoints.push(global.get(\"klimadata_Masterbad\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Schlafzimmer\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Valentina\").dewpoint);\ndewpoints.push(global.get(\"klimadata_Wohnzimmer\").dewpoint);\n\n\n//var dewpointsSorted =  dewpoints.sort()[dewpoints.length - 1];\n//msg.payload = dewpointsSorted[dewpointsSorted.count - 1]\n\n\n\n\nmsg.payload = round(dewpoints.sort()[dewpoints.length - 1],1);\nvar highestDewpoint = round(dewpoints.sort()[dewpoints.length - 1],1);\nvar suggestedVorlaufTemp = highestDewpoint + minDiffToHighestDewpoint;\n\n\nvar Vorlauf\n\n\n\nif (suggestedVorlaufTemp > maxVorlauf) {\n    Vorlauf = maxVorlauf;\n} else if (suggestedVorlaufTemp < minVorlauf) {\n    Vorlauf = minVorlauf;\n} else {\n    Vorlauf = suggestedVorlaufTemp\n}\n\nmsg = {\n    requesttype:'SET',\n    parameters:[923],\n    value:Vorlauf,\n    topic:`SET 923 to ${Vorlauf}`\n}\n\nmsg2 = {\n    requesttype:'SET',\n    parameters:[924],\n    value:Vorlauf,\n    topic:`SET 924 to ${Vorlauf}`\n}\n\nnode.status({fill:\"green\",shape:\"dot\",text:\"Setze minVorlauf: \"+Vorlauf});\n\n//msg.payload = Vorlauf\n\n\nreturn [msg,msg2]","outputs":2,"noerr":0,"initialize":"","finalize":"","x":570,"y":300,"wires":[["de99bc94.df97f"],["de99bc94.df97f"]]},{"id":"653ee994.fb9e38","type":"switch","z":"15be78c0.6761c7","name":"nur bei Kühlung","property":"heizungDiag.BetriebsartKK","propertyType":"global","rules":[{"t":"gt","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":320,"y":300,"wires":[["14ef3f3d.2fcfe1"]]},{"id":"dca61b4b.be0808","type":"inject","z":"15be78c0.6761c7","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":80,"wires":[["c9229821.a71818"]]},{"id":"d6bd9f7c.f0d72","type":"link out","z":"15be78c0.6761c7","name":"","links":["7d5ab016.e2f37"],"x":415,"y":80,"wires":[]},{"id":"c8eb0126.5b7e4","type":"function","z":"15be78c0.6761c7","name":"Prepare-Powerflow Data","func":"\nfunction makeFloat ($value) {\n    $myRet = parseFloat($value)\n    if (isNaN($myRet)) {\n        return 0\n    } else {\n        return $myRet\n    }\n}\n\n\nvar $myRet = {\n   Kesseltemp:makeFloat(msg.payload['8310'].value),\n   WPBetriebstunden:makeFloat(msg.payload['8330'].value),\n   WPStartcounter:makeFloat(msg.payload['8331'].value),\n//   WPTempRücklauf:makeFloat(msg.payload['8410'].value),\n//   WPTempVorlauf:makeFloat(msg.payload['8412'].value),\n   TempAußen:makeFloat(msg.payload['8700'].value),\n   TempAußenGedämpft:makeFloat(msg.payload['8703'].value),\n   TempAußenGemischt:makeFloat(msg.payload['8704'].value),\n   HKPumpeQ2:makeFloat(msg.payload['8730'].value),\n   HKMischerAufY1:makeFloat(msg.payload['8731'].value),\n   HKMischerZuY2:makeFloat(msg.payload['8732'].value),\n   TempRaum:makeFloat(msg.payload['8740'].value),\n   TempRaumSoll:makeFloat(msg.payload['8741'].value),\n   TempRaumModell:makeFloat(msg.payload['8742'].value),\n   TempVorlauf:makeFloat(msg.payload['8743'].value),\n   TempVorlaufSollHeizen:makeFloat(msg.payload['8744'].value),\n//   StatusRaumThermostat:makeFloat(msg.payload['8749'].value),\n//   ModulationPumpePerc:makeFloat(msg.payload['8750'].value),\n   TempVorlaufSollKühlen:makeFloat(msg.payload['8756'].value),\n   TempTrinkwasser:makeFloat(msg.payload['8830'].value),\n   TempTrinkwasserSoll:makeFloat(msg.payload['8831'].value),\n   TempTrinkwasserZirkulation:makeFloat(msg.payload['8835'].value),\n   TempPuffer1:makeFloat(msg.payload['8980'].value),\n   TempPuffer1Soll:makeFloat(msg.payload['8981'].value),\n   TempPuffer2:makeFloat(msg.payload['8983'].value),\n   BetriebsartHK:makeFloat(msg.payload['700'].value),\n   BetriebsartKK:makeFloat(msg.payload['901'].value),\n   LowerLimitVorlaufK:makeFloat(msg.payload['923'].value)\n}\n//global.set(\"heizungDiag\",$myRet)\nmsg.payload = $myRet\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":80,"wires":[["7bb7915d.8e349","fb3db173.65b1a"]]},{"id":"c9229821.a71818","type":"function","z":"15be78c0.6761c7","name":"Send-BSB-Req","func":"msg = {\n    requesttype:'GET',\n    parameters:[700,8099,8310,8325,8330,8331,8427,8429,8700,8703,8704,8730,8731,8732,8740,8741,8742,8743,8744,8756,8830,8831,8835,8980,8981,8983,901,923],\n    topic:'GetDiagData'\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":300,"y":80,"wires":[["d6bd9f7c.f0d72"]]},{"id":"38684a0b.cdb516","type":"link in","z":"15be78c0.6761c7","name":"","links":["afaaf839.c5e558"],"x":495,"y":80,"wires":[["4290c4a6.90df7c"]]},{"id":"4290c4a6.90df7c","type":"switch","z":"15be78c0.6761c7","name":"get-Return","property":"topic","propertyType":"msg","rules":[{"t":"eq","v":"GetDiagData","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":640,"y":80,"wires":[["c8eb0126.5b7e4"]]},{"id":"7bb7915d.8e349","type":"influxdb out","z":"15be78c0.6761c7","influxdb":"b630b97f.fee398","name":"heizung","measurement":"diagnostics","precision":"","retentionPolicy":"","x":1060,"y":80,"wires":[]},{"id":"fb3db173.65b1a","type":"change","z":"15be78c0.6761c7","name":"save Global","rules":[{"t":"set","p":"payload.timestamp","pt":"msg","to":"","tot":"date"},{"t":"set","p":"heizungDiag","pt":"global","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1070,"y":120,"wires":[[]]},{"id":"de99bc94.df97f","type":"link out","z":"15be78c0.6761c7","name":"","links":["7d5ab016.e2f37"],"x":735,"y":300,"wires":[]},{"id":"58f81f2e.2720e","type":"comment","z":"15be78c0.6761c7","name":"DiagData zu InfluxDB","info":"","x":310,"y":20,"wires":[]},{"id":"625daed1.47da7","type":"comment","z":"15be78c0.6761c7","name":"Adaptive Vorlauftemperatur für Kühlung","info":"","x":370,"y":240,"wires":[]},{"id":"8d3e4f17.24a33","type":"group","z":"15be78c0.6761c7","name":"BSB-LAN Messages Queue","style":{"stroke":"#92d04f","fill":"#001f60","label":true,"label-position":"sw","color":"#bfbfbf"},"nodes":["5a550566.37d1cc","c666c875.548898","8a791d38.a9a77","7d5ab016.e2f37","afaaf839.c5e558","40f43360.d5d08c","810d1d6b.60f1d"],"x":1334,"y":39,"w":692,"h":190},{"id":"5a550566.37d1cc","type":"bsb-lan","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","device":"481b0fd8.623ad","name":"","requesttype":"GET","parameters":[],"value":"","x":1780,"y":80,"wires":[["8a791d38.a9a77","afaaf839.c5e558","810d1d6b.60f1d"]]},{"id":"c666c875.548898","type":"simple-queue","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","name":"","firstMessageBypass":true,"bypassInterval":"5000","x":1560,"y":80,"wires":[["5a550566.37d1cc"]]},{"id":"8a791d38.a9a77","type":"change","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","name":"Q-fetch next","rules":[{"t":"set","p":"trigger","pt":"msg","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1870,"y":140,"wires":[["40f43360.d5d08c"]]},{"id":"7d5ab016.e2f37","type":"link in","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","name":"BSB-Queue-In","links":["40f43360.d5d08c","d6bd9f7c.f0d72","de99bc94.df97f"],"x":1375,"y":80,"wires":[["c666c875.548898"]]},{"id":"afaaf839.c5e558","type":"link out","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","name":"BSB-Queue-Out","links":["38684a0b.cdb516"],"x":1985,"y":80,"wires":[]},{"id":"40f43360.d5d08c","type":"link out","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","name":"BSB-Queue-FetchNext","links":["7d5ab016.e2f37"],"x":1975,"y":140,"wires":[]},{"id":"810d1d6b.60f1d","type":"debug","z":"15be78c0.6761c7","g":"8d3e4f17.24a33","name":"","active":false,"tosidebar":true,"console":false,"tostatus":true,"complete":"true","targetType":"full","statusVal":"topic","statusType":"msg","x":1850,"y":180,"wires":[]},{"id":"481b0fd8.623ad","type":"bsb-lan-device","host":"bsb-lan.fritz.box","port":"80"},{"id":"b630b97f.fee398","type":"influxdb","hostname":"192.168.178.10","port":"8086","protocol":"http","database":"heizung","name":"heizung","usetls":false,"tls":""}]

n300

Zur Info: Hab grade noch nen Status gefunden, der vom BSB-LAN als "not found" deklariert wird.

Und zwar: 255 -> ist bei mir lt. original Bedienteil "Kühlbetrieb, reduziert"
Gilt zB.: für 8004 Status - Status Kühlkreis 1

Falls ihr das bei ner zukünftigen Firmware mal einbauen wollt.
Sollte ich euch damit bloß nerven, sagt mir das bitte auch. Dann bin ich schon ruhig ;)