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

Luposoft

@Schotty
Danke dir für die Blumen  :)
(So wie ich das grade sehe, haben die andere verdient...)

MQTT ist ein Standard-Telegramm. Das muß dann auf jedem Broker funktionieren.
MQTT2 heisst bei Fhem halt das Modul der aktuellen MQTT-Implementierung.

Bisher werden nur Steuerbefehle verarbeitet  (/S und /I). Das um Abfragen zu erweitern, sollte kein Problem sein.
Ist bisher nicht drin, weil ich da keinen Bedarf gesehen habe.

Ich lasse das BSB-LAN machen, und mir eigenständig situationsabhängig Meldungen senden.
So bekomme ich die notwendigen Statusänderungen nur gesendet, wenn sie sich ändern. Im BSB-Lan werden sie mit sehr kurzen Intervallen abgefragt, und bei Änderung hochgeschickt.
Das funktioniert echt gut.
Das Modul dazu hatte ich ja schon früher mal hier veröffentlicht. Das war aber ohne Reaktion geblieben. Scheint also der Bedarf nicht da zu
sein.
Raspi B+
CUL nano 433MHz
CUL nano 868MHz
ELCO Thision S Plus 19
Arduino Due

Luposoft

@freetz
Jetzt kam ich dazu, an der Heizung das Ändern der Uhrzeit mitzuschneiden.

17:02:17.404 -> DISP->ALL  INF    0 Uhrzeit und Datum - Datum/Zeit: 14.01.2021 17:03:06
17:02:17.404 -> DC 8A 7F 14 02 05 00 00 6C 00 79 01 0E 04 11 03 06 00 20 3E


Mehr kommt da nicht. Ist es das, was du brauchst?

Dann hab ich gedacht, in der defs.h alle command-id vom Parameter 0 außer 05 00 00 6C auszukommentieren.
Das klappt aber auch nicht.
Die 0-Einträge in der Version 0.43 sind die gleichen wie in den 2.0.x
In der 0.43 hat es funktioniert. Gibts da woanders Stolperfallen?
Raspi B+
CUL nano 433MHz
CUL nano 868MHz
ELCO Thision S Plus 19
Arduino Due

Schotty

#5252
Zitat von: Luposoft am 15 Januar 2021, 16:35:50
Bisher werden nur Steuerbefehle verarbeitet  (/S und /I). Das um Abfragen zu erweitern, sollte kein Problem sein.
Ist bisher nicht drin, weil ich da keinen Bedarf gesehen habe.
Könnte aber durchaus interessant sein, wenn man bspw Parameter außerhalb des regulären Intervalls abrufen oder zusätzlich zu den festen Intervallen bei Bedarf noch andere Parameter abrufen möchte. So könnte man bspw 10 Parameter mit festem Intervall in der config.h anlegen und BSB-LAN senden lassen, dann aber noch zusätzliche Parameter brokerseitig hinterlegen, die man dann im Bedarfsfall abruft (aber eben nicht dauernd braucht und daher nicht ins normale Sendeintervall mit aufnehmen möchte).

Zitat
Ich lasse das BSB-LAN machen, und mir eigenständig situationsabhängig Meldungen senden.
So bekomme ich die notwendigen Statusänderungen nur gesendet, wenn sie sich ändern. Im BSB-Lan werden sie mit sehr kurzen Intervallen abgefragt, und bei Änderung hochgeschickt.
Das funktioniert echt gut.
Das Modul dazu hatte ich ja schon früher mal hier veröffentlicht. Das war aber ohne Reaktion geblieben. Scheint also der Bedarf nicht da zu
sein.
Also das keinerlei Reaktion kam, kann ich kaum glauben, es sei denn, das ist untergegangen und uns durchgerutscht. Poste bitte nochmal den Link zum entspr Beitrag.
Falls das zufällig die Geschichte war, wo ein User (du?) seinen custom-code gepostet hatte, um einzelne Sendeintervalle für verschiedene Parameter anzugeben, so kam zumindest von mir die Reaktion, dass ich das gut finde, da ich selbst mit der Lösung eines Intervalls für alle Parameter nicht wirklich glücklich bin. Grund: Wenn man bspw das Brennerverhalten monitoren möchte zwecks Optimierung, braucht man nunmal sehr kleine Intervalle, bspw 10-20Sek für den Brennerstatus - aber dann alle Parameter (also auch TWW, AT etc.) im 10sek-Intervall o.ä. abzufragen und dann empfängerseitig auszusortieren ist imho eher suboptimal.
Aber so wie ich das jetzt mit der neuen Sendefunktion sehe, werde ich eh ein extra Unterkapitel in Kap 8 anlegen für die MQTT-Geschichte(n), insofern würde ich dort dann auch gerne auf interessante Lösungen hinweisen. Wie gesagt, poste bitte nochmal den entspr Beitragslink.
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

dertobsen

Zitat von: Schotty am 15 Januar 2021, 12:35:44
38kW!?! Puuuuh was n Brummer - wohnst du in nem Schloss/Kirche/Schwimmbad..?  ;D
Ein etwas größeres Haus mit mehreren Wohnungen ist es. Vorher war eine Vaillant Therme mit 45kW drin, die hat aber nur Ärger gemacht. Hoffe jetzt ist mit der Brötje mehr Ruhe. Daher auch der Wunsch das Ganze irgendwie abfragen zu können.
Hab es jetzt per MQTT im iobroker und visualisiere mit Grafana.

@Luposoft: Ich wäre auch stark am Link zu deinem Code interessiert, das klingt als könnte es Wünsche von mir treffen.

Luposoft

@Schotty
Mit keiner Reaktion, meinte ich, dass niemand direktes Interesse hatte, dies nutzen zu wollen.
Ja, du hast drauf reagiert. Da nehme ich diesbezüglich sehr gerne alles zurück.

Der alte Code wird mit der neuen 2.0 wohl nicht mehr funktionieren.
Ich werden meinen ein bissel aufhübschen, heißt kommentieren und diverse Testdinge rausnehmen.
Und dann sozusagen die Rumpfidee hier nochmal posten. Das mache ich sehr gerne.

Zu dem Senden von Abfragen: ich werde mich erstmal mit Github beschäftigen müssen.
Danke dir für den Link.
Dann könnte ich, sollte es kein anderer machen wollen, mich damit beschäftigen.
Raspi B+
CUL nano 433MHz
CUL nano 868MHz
ELCO Thision S Plus 19
Arduino Due

Schotty

Naja,da ich selbst wg des einen festen intervalls mqtt nicht nutze,habe ich kein direktes interesse zur eigenverwendung. Implementation fänd ich aber prinzipiell gut,hatte ich damals glaub ich auch so geäußert.

Jau,mach das gerne! Du könntest dein beispiel dann auch in deinem github-account (also in nem eigenständigen repo, nicht dem bsb-lan-fork) einstellen. Hätte den vorteil,dass ich dann vom handbuch aus darauf verlinken könnte und dann jeder user darauf zugriff hätte. Hier hat man ja auf dateianhänge nur zugriff,wenn man angemeldet ist. Änderungen etc könntest du dann dort bei dir vornehmen und es wäre dann auch im laufe der zeit immer auf dem aktuellen stand.
Sicher könnte ich auch den code selbst im handbuch einfügen,aber das wird dann schnell etwas unübersichtlich (siehe kapitel mit den einbindungsbeispielen für die verschiedenen systeme). Bei änderungen am code selbst wäre es für uns beide dann auch aufwändiger als die repo-lösung.
Dann noch eine kleine beschreibung dazu (da kann ich dir dann gern auch behilflich sein,falls du noch nie was mit markdown zu tun hattest,was aber auch leicht ist,wenn man`s erstmal einigermaßen verstanden hat) und voila,alles is schick :)
Meld dich da dann gern per email bei mir..

Abfragen via mqtt wäre m.e. ein interessantes feature,wenn es speichertechnisch etc kein overkill wäre. Also von meiner seite aus: ja,beschäftige dich gern damit ;)

Ps: vom tablet,daher nur kleinschreibung.. ;)
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

dertobsen

Habe es jetzt getestet, es klappt wieder ohne Probleme mit den Authentifizierung. Vielen Dank!!!  :)

Zwei Fragen habe ich aber noch:

1)
Es gibt Parameter, die zeitweise den Wert "---" annehmen. Bspw. Brennermodulation (8326) oder Drehzahl Heizkreispumpe 1 (8735). Ich setze sie dann im iobroker auf 0, damit ich im Grafana auch korrekte Darstellungen sehe und die influxDB im Hintergrund nicht meckert, da es kein Float o.Ä. ist. Ansonsten bleibt in der DB der letzte Wert stehen und die Graphen zeigen einen längeren Zeitraum mit falschen Wert.
Wenn man nun auch per MQTT senden kann, frage ich mich, ob es mit dieser Art und Weise Probleme geben könnte?

Oder an welcher Stelle könnte man das Verhalten ändern, sodass nicht mehr "---" im Broker landet?

2)
Darf man den Due auch mit Netzteil und gleichzeitig USB (Programming Port) zum Flashen betreiben? Ich werde da nicht schlau, ob es eine eingebaute Schaltung gibt, die dort einen Schutz bietet. Die Antwort darauf würde sich glaube ich in der Doku (ggf. im Bereich FAQ oder Flashen) noch gut machen. Genau wie die Frage, ob der Bus dabei angeschlossen bleiben darf - Da gehe ich mal von einem Ja aus, habe inzwischen (aus Versehen) beides probiert  ;D

Schotty

#5257
Zu 1) derzeit betrifft das senden via mqtt ja `nur` das setzen,sprich,du kannst somit die ba umschalten,nen tww push auslösen etc.
Bei ner abfrage im `sendemodus` würde dann natürlich bei solchen parametern wie geschildert auch --- zurückkommen,wäre also dann (wenn du es fhem-seitig nicht irgendwie lösen kannst) wohl ein problem wie von dir geschildert (kenne mich aber mit grafana etc nicht aus). Also entweder entspr mappen oder solche parameter eben regulär von bsb-lan schicken lassen. Aber so geschichten wie einmal in der stunde zusätzlich die at abfragen wäre ja trotzdem möglich und evtl ne interessante sache. Oder: wenn tww push via fhem ausgelöst,dann tww-temp für x-minuten hinterher abfragen etc..

Zu 2) stromversorgung via dc-in und anschluss des usb: ja,sollte problemlos möglich sein. Hab ich sogar auf meiner todo-liste 'im handbuch ergänzen',aber noch nicht gemacht - hole ich nach,danke für den hinweis ;) kommt dann mit ins ardu-kapitel zu den hinweisen, faq is schon sooo lang..
Adapter am reglerbus während flashen angeschlossen lassen: ja, definitiv problemlos möglich (kann ich gerne auch noch ins handbuch übernehmen,hab ich noch nie dran gedacht und du bist auch der erste,der das fragt - aber macht sinn)! Wäre sonst echt verdammt unpraktisch :D
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Accureve

#5258
@freetz: Wie angekündigt hier die Infos zur Anbindung meiner Zirkulationspumpe (über eine Funksteckdose mit einem entsprechenden Funkmodul am Arduino). Mein Ziel war es die bisherige Zeitschaltuhr zu ersetzen, sodass die Zirkulation nur zu sinnvollen Zeiten läuft und nicht ständig durch die Zirkulation das Brauchwasser abkühlen lässt:


  • Zirkulationszeiten über Config definierbar
  • Zirkulationszeiten über Weboberfläche änderbar
  • Aktivierung der Zirkulation bei Nutzung des Legionellenprogramms
  • Über Befehl der Hausautomatisierung lässt sich die Zirkulation zeitweise deaktivieren (z.B. wenn niemand anwesend ist)
  • Über Befehl der Hausautomatisierung lässt sich die Zirkulation aktivieren und direkt starten (z.B. wenn jemand nach Hause kommt)
  • Auch per Webseite lässt sich die Zirkulation manuell aktivieren, wenn z.B. das Baby in der Nacht gewickelt wird und man schnell warmes Wasser braucht.
  • Kein Gefummel in der 230V-Verkabelung durch Funksteckdosen (z.B. Brennenstuhl RCS1000N für ~6,5€ pro Steckdose (13€ im Doppelpack - https://www.idealo.de/preisvergleich/MainSearchProductCategory.html?q=rcr+1000n))
  • Günstiges 433 MHz Funk Sende Modul für einfache Einbindung an Arduino für ~2€ (https://www.reichelt.de/entwicklerboards-433-mhz-rx-tx-modul-debo-433-rx-tx-p224219.html?PROVID=2788)

Hier der Code:

In der Definition
#ifdef CIRCULATION
#include <RCSwitch.h>
#endif

#ifdef CIRCULATION
RCSwitch circulationPowerSwitch = RCSwitch();
bool circulationRunning = false;
bool circulationEnabled = false;
int circulationCurrentDataset;
int circulationLastCheckedMinute;
#endif


In Loop()
#ifdef CIRCULATION
  int currentMinute = minute();

  if (circulationLastCheckedMinute != currentMinute)
  {
    circulationCheck();
    circulationLastCheckedMinute = currentMinute;
  }
#endif


In Loop() in der HTTP-Auswertung
// Answer to unknown requests
        if(!isdigit(p[1]) && strchr("ABCDEGHIJKLMNOPQRSTVXYZ",p[1])==NULL){
          webPrintHeader();
          webPrintFooter();
          break;
        }

#ifdef CIRCULATION
        if (p[1] == 'Z') {
          // Print short header with option 'ZS'
          if(p[2] == 'S')
          {
            client.println(F("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n   <html><head>\n   <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">\n   <title>BSB-LAN Web</title>\n </head><body>\n <table width=80% align=center><tr><td>\n"));           
          }
          else webPrintHeader();

          int currentHour = hour();
          // Ignore enabling/disabling requests during nighttime (thus avoid disabling circulation caused by e.g. empty cellphone battery)
          if (currentHour <= circulationNightStart && currentHour >= circulationNightEnd)
          {
            if (p[2] == '1')
            {
              circulationEnabled = true;

              if ((minute() + circulationArriveTime) <= 59)
              {
                circulationArriveDataset[0][2] = hour();
                circulationArriveDataset[0][3] = minute() + circulationArriveTime;
              }
              else
              {
                circulationArriveDataset[0][2] = hour() + 1;
                circulationArriveDataset[0][3] = minute() + circulationArriveTime - 60;
              }
              circulationCurrentDataset = circulationArriveProgram;
              circulationPowerSwitch.switchOn(circulationRcHouseCode, circulationRcPlugCode);
              circulationRunning = true;
            }
            else if (p[2] == '0')
            {
              circulationEnabled = false;
            }
          }

          if (p[2] == '2') {
            circulationPowerSwitch.switchOn(circulationRcHouseCode, circulationRcPlugCode);
            circulationRunning = true;
            circulationCurrentDataset = circulationManualProgram;
          }
          else if (p[2] == '3') {
            circulationPowerSwitch.switchOff(circulationRcHouseCode, circulationRcPlugCode);
            circulationRunning = false;
          }
          else if (p[2] == '4') {
            byte tableLine;
            p = strchr(p, '='); // search for '=' sign
            p++;                // position pointer past the '=' sign
            tableLine = atoi(p);     // convert until non-digit char is found
            p = strchr(p, ','); // search for ','
            p++;                // position pointer past the '=' sign
            circulationTimeDatasets[tableLine][0] = atoi(p);     // convert until non-digit char is found
            p = strchr(p, ','); // search for ',' sign
            p++;                // position pointer past the '=' sign
            circulationTimeDatasets[tableLine][1] = atoi(p);     // convert until non-digit char is found
            p = strchr(p, ','); // search for ',' sign
            p++;                // position pointer past the '=' sign
            circulationTimeDatasets[tableLine][2] = atoi(p);     // convert until non-digit char is found
            p = strchr(p, ','); // search for ',' sign
            p++;                // position pointer past the '=' sign
            circulationTimeDatasets[tableLine][3] = atoi(p);     // convert until non-digit char is found
          }
         
          client.println(F("Automatic circulation deactivated between "));
          client.print(circulationNightStart);
          client.println(F(" and "));
          client.print(circulationNightEnd);
          client.println(F(" o'clock. This can be changed in BSB_lan_config.h</td><td></td><td></td></tr>"));
         
          client.println(F("<tr><td>Circulation currently: "));
          circulationEnabled ? client.println(F("activated")) : client.println(F("deactivated"));
          client.println(F("</td><td><select id=circ-10><option value=0>Disable circulation</option>"));
          client.println(F("<option value=1>Enable circulation</option></select></td>"));
          client.print(F("<td><input type=button value='Set' onclick=\"setCirc(-1)\"/></td></tr>"));
 
          client.println(F("<tr><td>Circulation running: "));
          client.println(circulationRunning);
          client.println(F("</td><td><select id=circ-20><option value=2>Start circulation manually</option>"));
          client.println(F("<option value=3>Stop circulation manually</option></select></td>"));
          client.print(F("<td><input type=button value='Set' onclick=\"setCirc(-2)\"/></td></tr>"));
          client.println(F("<tr><td>Program active: "));
          client.println(circulationCurrentDataset);
          client.println(F("</td><td></td><td></td></tr>"));

          // Command 'ZS' shows short webpage without circulation time datasets
          if (p[2] == 'S') {
            webPrintFooter();
            break;
          }

          for (int line = 0; line < sizeof(circulationTimeDatasets) / sizeof(circulationTimeDatasets[0]); line++)
          {
            client.println(F("<tr><td>Circulation - Time "));
            client.print(line);
            client.print(F(" start: "));
            if(circulationTimeDatasets[line][0] < 10) client.print("0");
            client.print(circulationTimeDatasets[line][0]);
            client.print(F(":"));
            if(circulationTimeDatasets[line][1] < 10) client.print("0");
            client.print(circulationTimeDatasets[line][1]);
            client.print(F("</td><td><param value=N id='circ"));
            client.print(line);
            client.print(F("0'/>"));
            client.print(F("<input type=number min=0 max=23 style='width:3em;' id='circ"));
            client.print(line);
            client.print(F("1'/>"));
            client.print(F("<input type=number min=0 max=59 style='width:3em;' id='circ"));
            client.print(line);
            client.print(F("2'/>"));
            client.print(F("</td><td rowspan=2>"));
            client.print(F("<input type=button value='Set' onclick=\"setCirc("));
            client.print(line);
            client.print(F(")\"/></td></tr>"));
            client.println(F("<tr><td>Circulation - Time "));   
            client.print(line);
            client.print(F(" end: "));
            if(circulationTimeDatasets[line][2] < 10) client.print("0");
            client.print(circulationTimeDatasets[line][2]);
            client.print(F(":"));
            if(circulationTimeDatasets[line][3] < 10) client.print("0");
            client.print(circulationTimeDatasets[line][3]);
            client.print(F("</td><td>"));
            client.print(F("<input type=number min=0 max=23 style='width:3em;' id='circ"));
            client.print(line);
            client.print(F("3'/>"));
            client.print(F("<input type=number min=0 max=59 style='width:3em;' id='circ"));
            client.print(line);
            client.print(F("4'/>"));
            client.print(F("</td></tr>"));
          }

          webPrintFooter();
          break;
        }
#endif


In Setup()
#ifdef CIRCULATION
  circulationPowerSwitch.enableTransmit(8);
#endif


Nach loop()
#ifdef CIRCULATION
/* *****************************************************************
    Function: circulationCheck()
    Does:     Checks circulation status and activates/deactivates power plug if necessary
   Pass parameters:
    none
   Parameters passed back:
    none
   Function value returned:
    none
   Global resources used:
    none
* *************************************************************** */

void circulationCheck()
{
  query(7806); // query warmwater temperature
  double reading = strtod(decodedTelegram.value, NULL);

  if (reading > 60.0) // Legionella program running - thus activate circulation
  {
    if (circulationRunning == false)
    {
      Serial.println(F("Circuation started."));
      circulationPowerSwitch.switchOn(circulationRcHouseCode, circulationRcPlugCode);
      circulationRunning = true;
      circulationCurrentDataset = circulationLegionellenProgram;
    }
    return;
  }

  // When legionalla program is finished, stop circulation
  if (circulationRunning == true && circulationCurrentDataset == circulationLegionellenProgram)
  {
    Serial.println(F("Circulation stopped."));
    circulationPowerSwitch.switchOff(circulationRcHouseCode, circulationRcPlugCode);
    circulationRunning = false;
  }

  // Ignore circulation programs if not enabled
  if (circulationEnabled == false && circulationRunning != true)
    return;

  int currentHour = hour();
  int currentMinute = minute();

  // When circulation was started with arrival of persons (http-command '/Z1'), disable program after endtime
  if (circulationRunning == true && circulationCurrentDataset == circulationArriveProgram)
  {
    if (circulationArriveDataset[0][0] == currentHour && circulationArriveDataset[0][1] == currentMinute)
    {
      Serial.println(F("Circulation stopped."));
      circulationPowerSwitch.switchOff(circulationRcHouseCode, circulationRcPlugCode);
      circulationRunning = false;
    }
    else return;
  }

  // Activate circulation according to time dataset
  for (int i = 0; i < sizeof(circulationTimeDatasets) / sizeof(circulationTimeDatasets[0]); i++)
  {
    if (currentHour == circulationTimeDatasets[i][0] && currentMinute == circulationTimeDatasets[i][1] && circulationRunning == false)
    {
      Serial.println(F("Circulation started."));
      circulationPowerSwitch.switchOn(circulationRcHouseCode, circulationRcPlugCode);
      circulationRunning = true;
      circulationCurrentDataset = i;
      return;
    }
  }
  Serial.println(circulationCurrentDataset);

  // Deactivate circulation according to time dataset
  if (circulationRunning == true && circulationCurrentDataset >= 0 && currentHour >= circulationTimeDatasets[circulationCurrentDataset][2] && currentMinute >= circulationTimeDatasets[circulationCurrentDataset][3])
  {
    Serial.println(F("Circulation stopped."));
    circulationPowerSwitch.switchOff(circulationRcHouseCode, circulationRcPlugCode);
    circulationRunning = false;
  }
}
#endif


In der Config
// Activate circulation control
#define CIRCULATION
#define circulationLegionellenProgram -1
#define circulationArriveProgram -2
#define circulationManualProgram -3
char circulationRcHouseCode[] = "10101";
char circulationRcPlugCode[] = "10000";
byte circulationNightStart = 22;
byte circulationNightEnd = 8;
byte circulationArriveTime = 5;

byte circulationArriveDataset[1][2];

byte circulationTimeDatasets[][4] = {
  // StartHour, StartMinute, EndHour, EndMinute
  {6, 0, 6, 5},
  {7, 0, 7, 5},
  {8, 0, 8, 5},
  {9, 0, 9, 5},
  {10, 0, 10, 5},
  {11, 0, 11, 5},
  {12, 0, 12, 5},
  {13, 0, 13, 5},
  {14, 0, 14, 5},
  {15, 0, 15, 5},
  {16, 0, 16, 5},
  {17, 0, 17, 5},
  {18, 0, 18, 5},
  {19, 0, 19, 5},
  {20, 0, 20, 3},
  {21, 0, 21, 3},
  {22, 0, 22, 3},
  {0, 0, 0, 0},
  {0, 0, 0, 0},
  {0, 0, 0, 0}
};


Benötigt wird die Bibliothek "rc-switch", die über die Bibliotheksverwaltung installiert werden kann.
Ich habe den Code in V2 integriert und angehängt. Außerdem sind anbei Bilder der Funksteckdosen und Sender-Integration.

dertobsen

Zitat von: Schotty am 15 Januar 2021, 22:30:06
Adapter am reglerbus während flashen angeschlossen lassen: ja, definitiv problemlos möglich (kann ich gerne auch noch ins handbuch übernehmen,hab ich noch nie dran gedacht und du bist auch der erste,der das fragt - aber macht sinn)! Wäre sonst echt verdammt unpraktisch :D

Du wirst lachen, aber ich hab mir extra eine Verteilerdose gesetzt, an der ich dann die Kabel trennen kann. Hätte ich mal direkt gefragt :) ;D

Bzgl. dem Ändern der Werte per MQTT meinte ich jetzt das neue Feature von Luposoft. Ich lasse mir momentan allerhand Werte vom BSB-LAN alle 60 Sekunden an einen Mosiqutto MQTT Server senden und habe diesen auch im iobroker eingebunden. Da hab ich dann ein Script, welches die Werte beim jeweils ersten Auftreten eines "---" einmalig auf 0 setzt - Also im Grunde auf dem MQTT-Server. Somit ist dann einmalig die 0 in der DB und Grafana zeichnet mir einen sauberen Graphen.

Wenn das BSB-LAN nun auf alle Änderungen der dortigen Werte auch reagiert, könnte es ja zu Problemen kommen. Die Werte die ich hier ändere sind aber m.E. nach nur Soll- und Ist-Werte, die man an der Heizung selbst nicht ändern können sollte.

Schotty

Zitat von: dertobsen am 15 Januar 2021, 23:18:55
Du wirst lachen, aber ich hab mir extra eine Verteilerdose gesetzt, an der ich dann die Kabel trennen kann. Hätte ich mal direkt gefragt :) ;D
Nö,hab ich bei meinem ersten adapter damals vor 6 jahren auch gemacht - und sogar noch nen schalter,stecker etc für die busleitung mit drin verbaut :D

Zitat
Wenn das BSB-LAN nun auf alle Änderungen der dortigen Werte auch reagiert, könnte es ja zu Problemen kommen. Die Werte die ich hier ändere sind aber m.E. nach nur Soll- und Ist-Werte, die man an der Heizung selbst nicht ändern können sollte.
Hab jetzt mal gesucht - ich glaube,Luposoft meinte diese lösung hier: https://forum.fhem.de/index.php/topic,29762.msg1099136.html#msg1099136

Deinen letzten satz verstehe ich allerdings nicht so richtig..
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Accureve

Ich habe versucht die Version 2.0 und 1.1 inklusive meiner Zirkulationsänderungen auf meinen Arduino Mega aufzuspielen - allerdings wurde der Upload immer mit einer Fehlermeldung quittiert:

Der Sketch verwendet 251710 Bytes (99%) des Programmspeicherplatzes. Das Maximum sind 253952 Bytes.

Globale Variablen verwenden 4920 Bytes (60%) des dynamischen Speichers, 3272 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

Beim Hochladen des Sketches ist ein Fehler aufgetreten

avrdude: verification error, first mismatch at byte 0x3c000

         0x00 != 0x05

avrdude: verification error; content mismatch


Nur mit der V1.0 hat es problemlos geklappt.
Die Suchergebnisse der Forensuche bringen bei dem Fehler Hardwareprobleme, aber nicht dass es mit einem Sketch funktioniert und mit einem anderen Sketch auf der gleichen Hardware nicht....
Hat jemand eine Idee, woran es in diesem Fall liegen könnte (Programm siehe https://forum.fhem.de/index.php/topic,29762.msg1122147.html#msg1122147)? Ansonsten bleibe ich bei der V1.0...

Schotty

Sieht für mich nach speicherproblem aus - 'sketch verwendet 99%'. Guck mal im handbuch in anhang d  bzgl mega und v2.x..

Zum 'verification error' kann ich aber leider nix sagen..
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Schotty

Zitat von: Luposoft am 14 Januar 2021, 23:55:38
Topic: Standard ist MQTTTopicPrefix laut config.h, also wenn nichts geändert wurde 'BSB-LAN'.
Sollte MQTTTopicPrefix leer sein, dann muß als Topic 'FromBroker' genommen werden.

@Luposoft: Ich muss nochmal nachfragen, da ich den letzten Satz nicht so richtig verstehe. Laut config.h ist "BSB-LAN" besagtes Topic und kann ja prinzipiell auch umbenannt werden. Dann funktioniert es doch mit deiner Lösung auch noch, oder? Ist ja nur die Bezeichnung. Was aber meinst du mit dem zweiten Satz?
Handbuch zur BSB-LAN Hard- & Software (Anbindung v. Heizungsreglern, u.a. von Brötje & Elco):
https://1coderookie.github.io/BSB-LPB-LAN/

Scherheinz

#5264
Zitat von: Luposoft am 15 Januar 2021, 16:35:50
Ich lasse das BSB-LAN machen, und mir eigenständig situationsabhängig Meldungen senden.
So bekomme ich die notwendigen Statusänderungen nur gesendet, wenn sie sich ändern. Im BSB-Lan werden sie mit sehr kurzen Intervallen abgefragt, und bei Änderung hochgeschickt.
Das funktioniert echt gut.
Das Modul dazu hatte ich ja schon früher mal hier veröffentlicht. Das war aber ohne Reaktion geblieben. Scheint also der Bedarf nicht da zu
sein.

@Luposoft: Ich hab deine Posts die ganze Zeit verfolgt arbeite aber auch noch nicht solange mit MQTT. Ich bin sehr interessiert daran da bei mir immer mehr MQTT Teilnehmer dazu kommen (Tasmota und Arduino sei dank).
Da ich aber immernoch den Arduino Mega einsetze und deine Version (2.0.76) sicher auf dem Due beruht kann ich es leider nicht testen.

Ich habe noch mit einem im Netz gefundenen "notify" herumgespielt mitdem man direkt per MQTT FHEM Befehle übermitteln kann. So könnte man doch vielleicht direkt vom BSB_LAN aus Geräte in FHEM anlegen und Attribute setzen lassen. (Zum Beispiel  der Heizungsname als Gerät, Logging Funktion, Grundeinstellungen, usw...)

https://haus-automatisierung.com/nodered/2018/01/06/node-red-tutorial-reihe-part-5-befehle-fhem-ausfuehren.html