wunschliste modul BSB-Bus (Brötje, Elco Thision etc.)

Begonnen von justme1968, 14 Februar 2018, 14:09:54

Vorheriges Thema - Nächstes Thema

justme1968

ich mache diesen thread mal auf um ideen und wünsche für ein potentielles fhem modul für das bsb board zu sammeln.

das modul würde dann statt der aktuellen http anbindung verwendet werden können (im prinzip unabhängig von der angesprochenen json erweiterung. aber diese würde manches etwas einfacher machen).

also los ...


edit 2018-03-01: anbei eine erste version des moduls.
- die beiden jQuery files müssen nach .../www/pgm2
- das modul nach .../FHEM
- auf dem arduino muss der neueste BSB_lan sketch von heute drauf sein

danach anlegen mit define <name> BSB <ip>

danach verbindet sich fhem mit dem board und fragt ein mal die verfügbaren kategorien ab. man kann jetzt entweder das polls attribut von hand setzen, oder in die device detail ansicht gehen und die kategorien aufklappen. sobald für eine kategorie auf die parameter spalte klickt werden die verfügbaren parameter geholt und die betreffende kategorie aufgeklappt. das dauert je nach anzahl der parameter ein paar bis mehrere sekunden. nicht ungeduldig werden. zum ersten testen am besten kategorie 0 verwenden. die geht schnell. über die checkbox in jeder parameter zeile legt man fest ob der betreffende parameter regelmässig ausgelesen werden soll.

am besten verbose für das device auf 4 setzen. dann sieht man im log was passiert.

aktuell werden die werte fest alle 30 sekunden abgeholt. das wird noch konfigurierbar, und es wird mehrere intervalle für mehrere parameter gruppen geben.

die reading namen sind oft noch nicht fhem konform. außer warnung sollte das erst mal keine negativen auswirkungen haben.

die interaktiven klicks auf die checkboxen werden noch nicht browser übergreifend synchronisiert. also am besten nur ein fenster mit dem bsb device offen haben.

mit get <name> parameter <id> kann man gezielt einen (oder mehrere) parameter von hand abfragen.

das modul arbeitet komplett nonblocking.

viel spass damit. mal sehen wie viele anwender es wirklich gibt :)


was noch kommt:
- readings fhem konform machen
- mehrere parameter gruppen die mit unterschiedlichen intervallen abgefragt werden.
- setzen von paramtern
- mehr info im frontend über das was das modul gerade macht
- flashen aus fhem heraus
- mehr als ein offenes browser fenster
- ... ?

edit 2018-03-02: perl fix

edit 2018-03-05: multi tab js error fix, table layout fix

edit 2018-03-06: encoding fix, busy indicator

edit 2018-03-17: fhem-konforme reading namen

edit 2018-03-20: neues attribut readingsFormat
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FunkOdyssey

#1
Hach, ein Traum wird wahr. Vielen Dank für dein Engagement.

Ich weiß gar nicht wo ich anfangen soll. Je länger ich darüber nachdenke, desto voller wird die Wunschliste.

- Arduino Mega über das Modul flashbar (z.B. analog avrdude in ArduCounter)
- Parametrisierbare Konfiguration (Raumgerät, PINs, Shields, etc.)
- Standards wie disable, Interval, TimeOuts, etc.
- Auch Setter für Präsenztaste, TWW-Push, Raumtemperatur
- Benutzerauthentifizierung (SHA256 analog allowed?), damit die Kennwörter nicht im Klartext angezeigt werden

Schotty

#2
Großartig! Danke im Voraus!

Eine Beschreibung der Einbindung/Nutzung/Konfiguration des Moduls würde ich dann gerne im BSB-LAN-Handbuch mit aufnehmen.

Bei meiner Wunschliste bitte ich zu berücksichtigen, dass ich quasi FHEM-noob bin - also Quatsch-Wünsche bitte einfach ignorieren.. ;)

Die ersten Gedanken:
- prinzipiell sämtliche URL-Befehle via Modul nutzbar
- am Adapter angeschlossene oder auch bereits bei FHEM installierte Sensoren (wie bspw. Temp etc) einzeln/gesammelt verfügbar machen
- einfache Erstellung von Logs für frei auswählbare Parameter und ggf zusätzliche TempSensoren
- einfaches Übermitteln von einzelnen/gemittelten Raumtemperaturen für die Nutzung des Raumeinflusses
- Warnanzeige und Push-Mitteilungsfunktion für auswählbare Parameter - speziell Fehler- & Störungsmeldungen, oder auch bei der Über- oder Unterschreitung bestimmter Werte (Temps, Druck, Spannung etc) bzw Zustände (Kontakt Hx offen/geschlossen) (optional: abspielbare Alarmsounds oder sowas..?)
- Status-Abruf und -Änderung von zusätzlich angeschlossenen Koppelrelais (Abfragen) und Relaisboards (Setzen/Abfragen)

..und bestimmt noch viel mehr.. ;)
Gruß
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

freetz

Ich habe jetzt in BSB_LAN den JSON-Export integriert (über URL /J=a,b,c,d...) Kannst Du mal schauen, ob das so für Deine Zwecke passt?
Und für das Setzen der Parameter: Wie übermittelst Du die JSON-Struktur? Als application/x-www-form-urlencoded? Oder als application/json (was vermutlich einfacher für mich wäre, wenn klar ist, dass der gesamte Request-Body (nur) die JSON-Struktur enthält?
Und welche Form von Antwort würdest Du benötigen (je weniger, desto besser ;) )?

Gruß,

F.
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

justme1968

ja. mache ich. dauert aber noch etwas.

beim setzen: du hast die wahl. ich hatte aber an application/json gedacht. nur json im body.

ich denke im sketch ist es auch nicht nötig einen kompletten json parser zu implementieren. den string von vorne nach hinten durchzugehen und dann jeweils einen parameter nach dem anderen zu verarbeiten sollte reichen.

ich habe mir das setzen bisher überhaupt noch nicht angeschaut. als antwort 'reicht' im prinzip ein ok. je mehr sinnvolle antwort möglich ist um so besser.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

freetz

Ja, das habe ich mir auch so gedacht - letztlich wird es ja nur zwei Variablen geben, Parameter und Wert, und letzterer wird immer numerisch sein, da kann ich dann wirklich relativ einfach den String durchgehen und müsste bei application/json noch nicht einmal url-decoding machen, wenn ich das richtig sehe.
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

justme1968

ja. genau. und wenn mehr als ein parameter im gleichen json gesetzt wird kann man einfach alle der reihe nach verarbeiten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

freetz

Habe ich jetzt auch schon rudimentär so umgesetzt, vielleicht kriege ich das noch am WE fertig. Muss aber die Anzahl der maximal gleichzeitg in einem JSON zu bearbeitenden Parameter auf 20 begrenzen, da die Abarbeitung des HTTP-Requests vor der eigentlichen Befehlsverarbeitung passiert und ich so die geparsten Werte erst einmal zwischenspeichern muss. Aber mit 20 pro Aufruf sollte das wohl für die allermeisten Zwecke ausreichen.
Ich überlege gerade, die Abfrage von Parametern statt über die Auflistung in der URL auch über ein POST mit JSON-Struktur umzusetzen. Würde Dir das die Sache erleichtern oder ist der Abruf über URL und Auflistung der Parameter (/J=8700,5950,...) ausreichend?

Bzw., falls jemand anders da Ahnung hat: Wie machen andere Systeme das am liebsten (openHAB, Domoticz), wenn die per JSON Abfragen machen wollen? Mehr oder weniger statische URL oder die Abfrage als JSON liefern?
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

justme1968

wer hätte gedacht das du dich jetzt so beeilst :) ich brauche auf jeden fall noch eine ganze weile bis ich wirklich anfangen kann mit dem modul :(

post mit json wäre glaube ich konsistenter und vielleicht auf für andere systeme einfacher umzusetzen.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Scherheinz

Es wäre ganz gut wenn das Modul den Arduino etwas überwachen könnte. Zum Beispiel einen Zeitstempel sichern wenn es einen ungewollten Reset gab.

freetz

So, die JSON-Schnittstelle bei BSB-LAN läuft jetzt folgendermaßen:

1. über den URL-Befehl /J=a,c,b,d..., wobei a,b,... Parameter sind, die exportiert werden sollen.
2. Per HTTP POST Aufruf der URL /JQ (für Abfragen) und /JS (für das Setzen von Parametern). Folgende Parameter sind dabei möglich:
/JQ:
Senden:
"Parameter"
Empfangen:
"Parameter"
"Value"
"Unit"
"DataType" (0 = Zahl, 1 = ENUM, 2 = Wochentag, 3 = Stunde/Minute, 4 = Datum/Uhrzeit, 5 = Tag/Monat, 6 = String

/JS:
Senden:
"Parameter"
"Value" (nur numerisch)
"Type" (0 = INF, 1 = SET)
Empfangen:
"Parameter"
"Status" (0 = Fehler, 1 = OK, 2 = Parameter read-only)

Für nicht-numberische Werte beim Setzen von Parametern müsste ich die Erkennung ziemlich aufbohren; der einzige sinnvolle Einsatzzweck wäre m.E. das Setzen von Datum/Uhrzeit (wobei ich das noch gar nicht ausprobiert habe, ob das von BSB-LAN überhaupt so schon unterstützt wird) sowie etwaige Ferienprogramme. Wobei sich letztere vermutlich eh' besser über FHEM abwickeln lassen, als dabei dann auf die Therme zurückzugreifen.
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

justme1968

ich habe gerade mal mit dem modul angefangen. hier direkt ein paar anmerkungen:

- das auslesen per json geht. das format ist aber noch nicht ideal. besser wäre ein hash. etwas so:
{ "<param>": { "value": <value>, "unit": <unit>, "dataType": <dataType>}, "<param2>": {...} }

- man könnte überlegen value, unit und dataType einfach mit v, u und d abzukürzen. das mach den json
  string deutlich kürzer

- du schickst in unit die einheit als html text mit. besser wäre nur ascii, oder ein enum.

- es wäre gut wenn man auch alle anderen seiten ohne html (d.h. nur als formatiertes ascii) auslesen könnte.
  bsp: das modul liest beim ersten connect die konfig seite und dann alle vorhanden parameter
  die config seite zu debug zwecken und natürlich um die sketch konfiguration auszulesen.
  das html format das zurück kommt macht aber das parsen aufwändig und fehleranfällig gegenüber änderungen

- es scheint nirgendwo (auch auf der config seite nicht) eine ausgabe über das erkannte modell zu geben
  d.h. das was der sketch beim starten auf der konsole ausgibt

ich hoffe das klingt nicht zu schrecklich... aber wenn das ziel ist das board automatisiert und auch von
anderen system aus zu verwenden dann sollten alle möglichen informationen so maschinen lesbar wir
möglich zu bekommen sein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

freetz

Also das Format der Ausgabe kann ich gerne anpassen, aber bei den anderen Punkten bin ich eher skeptisch. Schon jetzt ist es aufwändig, die Seiten in deutsch und in Englisch zu pflegen, dazu kommt, dass für viele der Hauptaspekt zu sein scheint, es (auch) standalone laufen zu lassen, so dass man auf die HTML-Seiten nicht verzichten kann, bzw. man diejenigen, die die Seite jetzt (erfolgreich) parsen, nicht zwingen sollte, ihre Parser neu zu konfigurieren.
Davon ab habe ich immer darauf geachtet, dass sich an der grundlegenden Struktur der Inhalts-Zeilen nichts ändert, weil die Thematik ja schon seit Anbeginn besteht.

Die meisten anderen Punkte lassen auch sicherlich schneller in Deinem Modul umsetzen:
- Die Geräteerkennung bekommst Du über die Parameter 6225 und 6226
- Die (wenigen) HTML-Einheiten sind fix und können mit Suchen/Ersetzen abgewickelt werden

Mein Beitrag für dieses Modul (was ich eine tolle Idee finde, auch wenn ich bisher ohne auskomme), ist der JSON-Export. Alles darüber hinaus gehende, kann gerne jemand in BSB-LAN integrieren, aber meine Ressourcen sind dafür zu begrenzt.
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

justme1968

ok...

wenn du das json format für die ausgabe und für das setzen der werte noch anpassen kannst überlege mich mit für die anderen punkte noch etwas.

wäre es als kompromiss möglich bei der html ausgabe noch ein paar class attribute mit einzubauen?
z.b. in die tabelle am seiten anfang ein class=header, in die tabelle mit den eigentlichen daten ein class=content, in der liste der url befehle in die linke spalte ein class=cmd und in die rechte spalte ein class=descritpion. etwas ähnliches für die tabellen bei heizungsfunktion.

gerade wenn die seiten in unterschiedlichen sprachen kommen wäre es sehr hilfreich nur anhand der meta information zwischen den einzelnen komponenten einer zeile (kategorie/beschreibung/wert nzw. nicht unterstützt) unterscheiden zu können.


ich und vermutlich alle anderen die das board aktuell verwenden kommen ohne eigenes modul aus. ich denke aber das es mit einem modul und einem besser automatisierbaren interface noch einige anwender mehr geben kann.


ps: mit ist noch aufgefallen das zumindest im safari das eingabe feld für kategorie 0 nur mit tag und monat gefüllt wird. jahr und uhrzeit fehlen.

pps: zum flashen aus fhem heraus: bei anderen arduino modulen ist es so das die aktuelle firmware zum einen als tar file in contrib/arduino liegt und zum anderen als hex file in FHEM/firmware. letzteres wäre dann zwar immer eine version ohne besondere optionen, würde es einem einsteiger aber trotzdem erlauben recht schnell los zu legen. oder spricht noch etwas dagegen?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

noch etwas vergessen: bei den json werten kommt aktuell nicht mir welche möglichen werte bei setzen verwendet werden können. falls du die z.b. als optionales possibleValues array noch mit in die json ausgabe eines wertes stecken kannst könnte ich ganz auf die html abfrage mit /K... verzichten. dann wäre die class attribute bei der heizungsfunktion natürlich komplett unnötig.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968