Ankündigung

Einklappen
Keine Ankündigung bisher.

Mbus Daten auswerten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Hallo Hannes und Marcus,

    danke für die Rückmeldungen. Wenn ich Deien Code richtig verstehe, dann packst Du die Hexwerte zu einem String zusammen indem Du die verschiedenen Stellen hintereinanderschreibst. Wäre es nicht einfacher direkt mit den Zahlen zu rechnen und dann zu mulitplizieren. Also so:
    Code:
    Energie = int(line21) + int(line22)*100 + int(line23)*10000+int(line24*1000000)
    Zuletzt geändert von bmx; 15.10.2022, 09:51. Grund: CODE statt PHP

    Kommentar


      #17
      Hallo Hannes, das hört sich gut an - so stimmen die Werte (das geht bestimmt schöner):

      Code:
      Energie=int(str(hex(line[21])).replace("0x","")) + int(str(hex(line[22])).replace("0x","")) * 100 + int(str(hex(line[23])).replace("0x","")) *10000 + int(str(hex(line[24])).replace("0x","")) *1000000
      Zuletzt geändert von bmx; 15.10.2022, 09:51. Grund: CODE statt PHP

      Kommentar


        #18
        Hallo,
        sieht gut aus, hab ich auch so übernommen. Bzgl. Leistung und Durchfluss:
        Ich habe mich bei auswerten des Bytestreams auf die Einheiten die mitgeschickt werden verlassen, und da dürfte etwas vertauscht sein. Genauer gesagt Leistung und Durchfluss. Das würde mit meinen Werten auch Sinn machen, da meine Pumpe nur ein oder ausschaltet. Demnach wäre der Durchfluss immer ca. 0,25 m3/h Stunde, also ziemlich konstant. Ich habe das bei mir jetzt mal geändert, kann es derzeit aber witterungsbedingt nicht testen

        Werde mich melden sobald sich die Sonne aufgetan hat.

        Grüße,
        Hannes

        Kommentar


          #19
          hoffen wir auf schlechtes Wetter ;-)

          Kommentar


            #20
            Hallo Hannes, kennst Du das hier: http://www.m-bus.com/files/CBDIPW6.PDF ich habe da jetzt nichts gefunden, aber ggf. blickst Du da besser durch.

            Kommentar


              #21
              Hallo,
              genau nach dem Dokument habe ich den Datenstream ausgewertet.
              Habe jetzt den Port und die Zykluszeit aus der PlugIn.conf übernommen. Weiters habe ich nun die richtigen Bytes zur Berechnung der Leistung und des Durchfluss verwendet. Die waren ja bisher vertauscht. Werde in meinem ersten Post den Code ändern. Macht man so, oder?
              Die Werte stimmen jetzt mit den angezeigten Werten am Zähler überein. Es wird auch nicht, wie vorher angenommen, über 15min gemittelt.
              Ich habe mal einen Screenshot meiner Visu vom heutigen Tag angehängt (Da sind noch falsche Einheiten drin). Zykluszeit war 60sec. In meinen Plots bekomme ich aber nur alle 7 min einen Wert angezeigt?
              Im SQLite PlugIn hätte ich versucht den cycle auf 60 zu setzen um wirklich jeden Wert der ausgelesen wird auch anzuzeigen. Das hatte aber leider nicht den gewünschten Erfolg. Vielleicht kann uns Marcus diesbezüglich Input geben?
              Solaranlage.png

              Grüße,
              Hannes

              Kommentar


                #22
                hi Hannes,

                Danke für Deine Überarbeitung. Hier ist glaube ich ein Fehler:

                Code:
                Durchfluss=int(str(hex(line[33])).replace("0x","")) + int(str(hex(line[34])).replace("0x","")) * 100 + int(str(hex(line[35])).replace("0x","")) *10000 + int(str(hex(line[36])).replace("0x","")) *1000    #Durch 1000 wegen Einheit
                müsste meiner Meinung nach so aussehen:

                Code:
                Durchfluss=(int(str(hex(line[33])).replace("0x","")) + int(str(hex(line[34])).replace("0x","")) * 100 + int(str(hex(line[35])).replace("0x",""))* 10000 + int(str(hex(line[36])).replace("0x",""))* 1000000)/1000
                das SQLite Plugin schreibt nur geänderte Werte in die Datenbank und mittelt diese umso stärker, desto länger der Zeitraum in der Vergangenheit liegt (damit die Datenbank nicht zu groß wird) eventuell liegt es daran? Ist ja auch okay, ich muss ja nicht minutengenaue Spitzen sehen, hauptsache der SChnitt stimmt. Es müsste doch über 15 Minuten gemittelt werden (diesen Parameter kann man ja in Minicom einstellen), du erhälst bei einer Abfrage aber ggf. trotzdem jede MInute andere Werte, denn er mittelt ja immer über die letzten 15 Minuten.
                wenn Du jetzt von 18:00-18:20 0 Watt Leistung hast und um 18:21 300 Watt, dann wird die Abfrage um 18:20 0 Watt ergeben und die um 18:21 20 Watt.
                Zuletzt geändert von bmx; 15.10.2022, 09:52.

                Kommentar


                  #23
                  Kurze Rückmeldung: bei jedem 3-4 Leseversuch kommt keine Antwort, das ist bei mir aber unprobematisch, die Zähler bleiben im Auslesemodus und bei mir läuft es soweit seit fast drei Wochen stabil.
                  Vielen Dank Hannes!

                  Kommentar


                    #24
                    Hallo

                    Ich bin blutiger smarthome/smartvisu Anfänger und habe gerade mein erstes Projekt erfolgreich abgeschlossen (Lüftungsanlage). Mein nächstes Projekt wären jetzt meine WMZ´s (3 Stück). Bis jetzt habe ich die Zähler über ein schript ausgelesen, die Werte in eine Msql Datenbank geschrieben und über eine eigene php seite angezeigt. Ich möchte das ganze jetzt gerne in der smartvisu anzeigen. Meine Frage dazu wäre, ob es einfacher ist, nach einer Lösung zu suchen, wie ich meine msql db auslese um die werte in der smartvisu anzuzeigen, oder ob ich den mbus gleich von smarthome.py auslesen lassen soll.
                    Momentan läuft es so. Ich habe einen seriellen M-Bus Wandler direkt am Raspberry Pi
                    angeschlossen (Tx/Rx) und die Bibliotheken von rSCADA installiert.

                    http://bends.se/?page=anteckningar/a.../m-bus/libmbus

                    Mit


                    Code:
                    $timestamp = time();
                    //***********************************
                    //Heizungszaehler mit der ID:1 Hauptzaehler auslesen
                    //***********************************
                    $outputH = shell_exec("sudo /home/pi/wiringPi/libmbus-0.8.0/bin/mbus-serial-request-data -d -b 2400 /dev/ttyAMA0 1");
                    $xmloutputH=substr($outputH,strpos($outputH,'<MBusData>'));
                    $xmloutputH = new SimpleXMLElement($xmloutputH);
                    $zaehlerIDH=$xmloutputH->SlaveInformation->Id;
                    $zaehlerStandH=$xmloutputH->DataRecord[8]->Value;
                    $zaehlerStandH = $zaehlerStandH/10;
                    $timestampH=$xmloutputH->DataRecord[8]->Timestamp;
                    $test = "123";
                    
                    //***********************************
                    //Heizungszaehler mit der ID:2 Wohnung Oben auslesen
                    //***********************************
                    $outputO = shell_exec("sudo /home/pi/wiringPi/libmbus-0.8.0/bin/mbus-serial-request-data -d -b 2400 /dev/ttyAMA0 2");
                    $xmloutputO=substr($outputO,strpos($outputO,'<MBusData>'));
                    $xmloutputO = new SimpleXMLElement($xmloutputO);
                    $zaehlerIDO=$xmloutputO->SlaveInformation->Id;
                    $zaehlerStandO=$xmloutputO->DataRecord[8]->Value;
                    $zaehlerStandO=$zaehlerStandO/10;
                    //***********************************
                    //Heizungszaehler mit der ID:3 Wohnung Unten auslesen
                    //***********************************
                    $outputU = shell_exec("sudo /home/pi/wiringPi/libmbus-0.8.0/bin/mbus-serial-request-data -d -b 2400 /dev/ttyAMA0 3");
                    $xmloutputU=substr($outputU,strpos($outputU,'<MBusData>'));
                    $xmloutputU = new SimpleXMLElement($xmloutputU);
                    $zaehlerIDU=$xmloutputU->SlaveInformation->Id;
                    $zaehlerStandU=$xmloutputU->DataRecord[8]->Value;
                    $zaehlerStandU=$zaehlerStandU/10;
                    
                    $mysqlhost="localhost";
                    $mysqluser="****";
                    $mysqlpwd="*****";
                    $connection=mysql_connect($mysqlhost,$mysqluser,$mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");
                    $mysqldb="Heizung";
                    mysql_select_db($mysqldb,$connection) or die("Konnte die Datenbank nicht waehlen.");
                    $sql = "INSERT INTO zaehlerstand (timestamp,Haupt,Woben,Wunten) VALUES ($timestamp,$zaehlerStandH,$zaehlerStandO,$zaehlerStandU)";
                    $query = mysql_query($sql) or die("Anfrage 1 nicht erfolgreich");
                    lese ich den mbus aus und speichere die werte in meine db (1 mal täglich per crontab)

                    Welche Lösung würdet ihr vorschlagen?
                    Zuletzt geändert von bmx; 15.10.2022, 09:53.

                    Kommentar


                      #25
                      Hallo!

                      Ich kann Dir nicht genau sagen wie und obe es möglichst ist, mit Smarthome.py auf eine SQL Datenbank zuzugreifen, da könntest Du es meiner Meinung nach einfacher über das Network plugin auslesen.
                      Wenn ich es richtig verstanden habe, dann ließt Du nicht über Infrarotköpfe aus? Dann müsstest Du das MBUS plugin entsprechend anpassen, die devs anzupassen ist sicherlich nicht das Problem, schätzungsweise wirst Du aber auch das Protokoll anpassen müssen, da dieses ja speziell für die IR Schnittstelle der Pollucomzähler gemacht wurde. Ich kann nicht einschätzen wie kompliziert das ist, in jedem Fall hast Du eine gute Vorlage durch das Plugin.

                      Kommentar


                        #26
                        Ich habe hier einen Wasserzähler mit MBus Anschluss und einen USB-zu-MBUS Adapter (Master). Hat noch irgendwer ein Plugin geschrieben oder gefunden was ich nutzen könnte um nicht das Rad neu erfinden zu müssen?

                        Marcov hast Du da eine (funktionierende) Lösung zu?
                        Zuletzt geändert von bmx; 15.10.2022, 09:54.

                        Kommentar


                          #27
                          Hi,

                          ich hänge hier mal meinen Stand an, das ist aber nicht mit aktueller Smarthome NG Infrastruktur kompatibel und auch für IR Leseköpfe geschrieben. Insgesamt ist der Code auch unaufgeräumt und nicht besonders klever gemacht, war glaube ich mein erstes Plugin.
                          Angehängte Dateien

                          Kommentar


                            #28
                            Super danke Dir.

                            Ich habe mir gestern eine kleine Logik entwickelt mit einer externen Library. Das könnte ich evtl. mal zu einem Plugin aufbohren und einstellen. Wird aber noch dauern.

                            Gruß,
                            Bernd

                            Kommentar


                              #29
                              Hallo bmx,

                              darf ich fragen, ob du weiter gekommen bist mit dem Plugin?
                              Und welchen USB-zu-MBUS Adapter (Master) du nutzt?

                              Ich möchte gerne die aktuellen Werte von meinem WMZ mittels MBus in smarthomeNG/smartVisu und volkszaehler bekommen.

                              Danke.

                              Kommentar


                                #30
                                Ich hatte angefangen ein Grundgerüst für ein Plugin zu machen aber da Morgan einem SmartDevicePlugin arbeitet, wollte ich das weitere Vorgehen daran abmachen. Ich habe aber eine Logik am Laufen die das was ich brauche ausliest,

                                Der Adapter ist sowas hier: https://www.ebay.de/itm/295153153619

                                Kommentar

                                Lädt...
                                X