Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Fernwärme Sensus PolluStat / MBus

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Fernwärme Sensus PolluStat / MBus

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      Clown007 last edited by

      @sborg Vielen Dank, das war mir so nicht klar. Jetzt muss ich erst mal wieder etwas warten 😉
      Zwischendurch hatte ich überlegt diesen HAT für den Raspberry zu bestellen: https://www.packom.net/m-bus-hats/
      Für alle zur Info, die sich ein weiteres Gehäuse sparen wollen.

      1 Reply Last reply Reply Quote 0
      • C
        Clown007 @SBorg last edited by

        @sborg Mittlerweile habe ich den MBus Master Hat am Raspi pi Zero am laufen. Wenn man die Kabel direkt anlötet, passt das sogar in das Standard Gehäuse. Ich habe lange gesucht, bis ich gelesen habe, dass GPIO 26 aktiviert werden muss 😉 Das habe ich jetzt einfach dauerhaft in der config.txt gelöst. England kostet jetzt Zoll ;-(

        Ich kann jetzt tatsächlich mein Fernwärme Messgerät mit libmbus auslesen. Jetzt muss ich die Daten zum ioBroker bringen.

        Eigentlich wollte ich die Daten per mqtt übertragen. Leider habe kein passendes Script gefunden. Dann habe ich angefangen die Daten zu parsen (mit xq) und mittels mosquitto an den iobroker MQTT Server zu senden. Da bin ich noch dabei. Wenn es läuft, kann ich meins gerne bereitstellen.

        Es gibt ja auch den ModBus Adapter. Gibt es nicht eine Software die einen MBus TCP Server auf dem Raspi bereit stellt? Ich habe leider mit suchen nichts gefunden.

        SBorg 1 Reply Last reply Reply Quote 0
        • SBorg
          SBorg Forum Testing Most Active @Clown007 last edited by

          @clown007 Brexit... 😉
          Mit dem USB-Teil hättest du halt einfach den Adapter nutzen können ohne weiteres drum herum (+10 Tage Lieferung bieten mittlerweile viele beim Ali an inkl. Zoll, was auch alles super funktioniert).
          Was aber auch funktionieren könnte, ist dein "falscher" Slave. Den Bus hast du mit dem Hat jetzt am laufen, dann kannst du auch mit dem Slave nun die Daten abgreifen. Ich weiß nur nicht ob der Adapter den Slave als Quelle akzeptiert. Aber Versuch macht kluch 🙂

          C 1 Reply Last reply Reply Quote 0
          • C
            Clown007 @SBorg last edited by Clown007

            @sborg Ich kann den USB Adapter nicht in den IoBroker Server stecken, weil der auf einem virtuellen Server läuft und ganz wo anders steht. Ich hätte den USB Adapter ja genau so in der Raspberry gesteckt oder habe ich einen Denkfehler? Anders wäre es mit einem ModBus-> TCP Server. Ich wollte jetzt einen "ganzen" iobroker auf dem Raspi aufsetzen.

            SBorg 1 Reply Last reply Reply Quote 0
            • SBorg
              SBorg Forum Testing Most Active @Clown007 last edited by

              @clown007 Macht der Raspi etwas oder bedient der nur den Hat?
              Du könntest auf dem Pi einen ioB installieren und nur den MBus-Adapter. Dann stellst du deinen ioB-Server auf Multihost um und den Pi als ioB-Slave.
              Ansonsten gibt es (unbezahlbare) MBus-LAN-Gateways ... so ab 500,- € aufwärts...
              ...oder mit Leidensfähigkeit auch Bastelprojekte MBus --> ESP8266/32 (dann per MQTT an den ioB)

              C 1 Reply Last reply Reply Quote 0
              • C
                Clown007 @SBorg last edited by Clown007

                @sborg Der Raspi macht nur den Hat. Das wäre also eine Option. War mir eigentlich zu viel Overhead. Ich hatte gehofft, dass es einen Modbus -> TCP Adapter in Software gibt (eigentlich reicht der Slave Teil von Modbus Adapter. Hat der Raspi Pi Zero genug Power für ein IoBroker?
                Eventuell mach ich doch noch die Umsetzung auf MQTT selber 😉

                SBorg 1 Reply Last reply Reply Quote 0
                • SBorg
                  SBorg Forum Testing Most Active @Clown007 last edited by

                  @clown007 Hatte ich oben vergessen, eine Softwarelösung kenne ich auch nicht.
                  Da der ioB auch auf einem PI 2 mit 500MB läuft, sollte es der Zero auch packen. Ein "naggischer" ioB mit einem Adapter braucht auch nicht wirklich viel.

                  C 1 Reply Last reply Reply Quote 0
                  • C
                    Clown007 @SBorg last edited by Clown007

                    @sborg Ich habe mir jetzt doch einfach ein kleines Bash Script geschrieben, dass die Daten zum MQTT Broker überträgt. Das kann Dein einfach per Cronjob ausgeführt werden:

                    Änderungen, Optimierungen, Anmerkungen natürlich erwünscht (mein erstes Bash Script)

                    #!/bin/bash 
                    
                    # Code Basis stammt von https://the78mole.de/taking-your-m-bus-online-with-mqtt/
                    # Ich habe es nur ergänzt um alle Datenfelden flexibel zum MQTT Server zu übertragen
                    # Getestet nur mit einem Wärmezähler. Ich hoffe es felxibel genug auch für andere Geräte
                    
                    
                    ADDRESS_FILE="~/addresses.txt"
                    BAUDRATE=2400
                    DEVICE=/dev/ttyAMA0
                    MQTT_HOST=HOSTNAME
                    MQTT_USER=MQTT_USER
                    MQTT_PASS=MQTT_PASSWORT
                    MQTT_TOPIC=MQTT_TOPIC
                    
                    #Basis Informationen
                    modbus_array[0]=.MBusData.SlaveInformation.Id
                    modbus_array[1]=.MBusData.SlaveInformation.Manufacturer 
                    modbus_array[2]=.MBusData.SlaveInformation.Version
                    modbus_array[3]=.MBusData.SlaveInformation.Status
                    
                    #----------------------------------------------------------
                    
                    
                    
                     
                    
                    while read ameter
                    do 
                    echo -n "Getting data from $ameter..."
                        # The sed is for replacing the @ with _ to be able to match on it in HASS templates
                         METER_DATA=$(mbus-serial-request-data-multi-reply -b $BAUDRATE $DEVICE $ameter | xq . | sed -e 's/@/_/')
                          /usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS \
                            -t $MQTT_TOPIC/$ameter -m "${METER_DATA}"
                      
                     BYTCNT=$(echo "$METER_DATA" | wc -c)
                        echo "  $BYTCNT bytes sent"
                    
                    
                    # Basis Parameter auslesen
                    for Parameter in "${modbus_array[@]}"
                    do
                      ausgabe=$(echo $METER_DATA | jq "$Parameter" )
                      #Punkte in / konvertieren für mqtt
                      Parameter=$(echo $Parameter | sed -e 's!\.!\/!g') 
                      /usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS -t $MQTT_TOPIC/$ameter$Parameter -m "$ausgabe"
                      #Ausgabe des MQTT Pfades und Wertes 
                      echo "$MQTT_TOPIC/$ameter$Parameter -> $ausgabe"
                    
                    done
                    
                    #Schleife über alle Data Records
                    for row in $(echo $METER_DATA | jq '.MBusData.DataRecord | keys'); do
                    
                    	#Leere Datenfelder am Anfang und Ende abfangen
                    	if [[ ${row} != "[" ]] && [[ ${row} != "]" ]]
                    	then
                    	 #Das Komma am Ende entfernen
                    	 id=$(echo "${row}" | sed -e 's/,//')
                     
                    	 #Einen Int Wert daraus machen
                    	 nummer=$(("$id"+0)) 
                    
                    	  #Alle Keys (Datenpunkte) auslesen
                    		for name in $(echo $METER_DATA | jq ".MBusData.DataRecord[$nummer] | keys"); do
                    	
                    			#Leere Datenfelder am Anfang und Ende abfangen
                    			if [[ ${name} != "[" ]] && [[ ${name} != "]" ]]
                    			then
                    	
                    				# Ein paar Sonderzeichen aus dem Pfad entfernen
                    				pfad=".MBusData.DataRecord[$nummer].${name}"
                    				pfad=$(echo $pfad |  sed 's/\"//g')	
                    				pfad=$(echo $pfad |  sed 's/\,//g')
                    	
                    				#Den richtigen Wert aus dem json holen
                    				wert=$(echo $METER_DATA | jq $pfad)
                    
                                                    #Anführungsteichen entfernen
                    				wert=$(echo $wert |  sed 's/\"//g')
                    
                    
                    				#Umformatieren für eine MQTT Pfad
                    				pfad=$(echo $pfad |  sed 's/\./\//g')
                    				pfad=$(echo $pfad |  sed 's/[/\_/g')
                    				pfad=$(echo $pfad |  sed 's/]//g')
                    				#Zum MQTT Server senden
                    				/usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS -t $MQTT_TOPIC/$ameter$pfad -m "$wert"
                    				echo "$MQTT_TOPIC/$ameter$pfad --> $wert"
                    		
                    			fi
                    
                    		done
                    
                    
                    	fi
                      
                    done	
                    
                    
                    
                    done < <(cat $ADDRESS_FILE)
                    
                    SBorg 1 Reply Last reply Reply Quote 0
                    • SBorg
                      SBorg Forum Testing Most Active @Clown007 last edited by

                      @clown007 Aus früherer leidiger Erfahrung bin ich nicht so der Fan von vielen Schreibzugriffen auf eine SD-Karte 😉

                      C 1 Reply Last reply Reply Quote 0
                      • C
                        Clown007 @SBorg last edited by Clown007

                        @sborg Wie kommst Du auf viele Schreibzugriffe? Du meinst das Bash Script macht mehr Schreibzugriffe als ein IoB? Es muss nichts gespeichert werden. Es muss nur das Bashscript ausgeführt werden. Das schreibt keinerlei Daten lokal auf das System (einmalig die MBus Adressen, aber auch die könnte man schnell hardcoden). Es werden also nur die Daten vom Betriebssystem gespeichert.
                        Wenn man sich mit Linux auskennt, könnte man das auch die Daten in eine RAM Disk schreiben und die SD-Karte vorm überschrieben schützen. Es sind ja nur log und System Daten. Oder man bootet den Raspi direkt mit PXE ohne SD-Karte 😉

                        SBorg 1 Reply Last reply Reply Quote 0
                        • SBorg
                          SBorg Forum Testing Most Active @Clown007 last edited by

                          @clown007 sagte in Fernwärme Sensus PolluStat / MBus:

                          Wie kommst Du auf viele Schreibzugriffe?

                          Kommt halt darauf an wie oft gepolt wird aber

                          done < <(cat $ADDRESS_FILE)
                          

                          muss halt auch schreibend jedes mal auf die Karte vorher gespeichert werden.
                          Der ioB schreibt wenig wenn du keine Daten/Adapter hast. Ob das wirklich weniger ist, ehrlich gesagt kA. Letztendlich hilft nur ausprobieren wie lange eine Karte durchhält. Mir hat es in einem Jahr 3 Stück zersemmelt, egal ob günstig, oder teure Kingston etc. Erstes Indiz sind immer komische Fehlermeldungen, bedingt dadurch, dass wg. Fehler das Filesystem auf "read only" gesetzt wurde. Das ist dann 5 vor 12 Uhr vor dem gänzlichen Tod 😉

                          C 1 Reply Last reply Reply Quote 0
                          • C
                            Clown007 @SBorg last edited by Clown007

                            @sborg In dem AdressFile steht nur die MBus Adresse. Die könnte man auch schnell hardcoden im Code oder den Scan jedesmal vorher ausführen. cat sollte aber nicht scheiben, oder?

                            SBorg 1 Reply Last reply Reply Quote 0
                            • SBorg
                              SBorg Forum Testing Most Active @Clown007 last edited by

                              @clown007 Nein, cat (=type bei DOS/Windows) ließt nur. Ich war der Meinung da landen die Messwerte drin, bis ich eben erst gecheckt habe, dass das Hat per Serial direkt ausgelesen wird.
                              Sorry, mein Fehler 😞
                              Alles gut und einfach so lassen.

                              C 1 Reply Last reply Reply Quote 1
                              • C
                                Clown007 @SBorg last edited by

                                @sborg Das ist ja eigentlich das schöne, dass es sehr einfach ist. Nicht mal ein Backup macht Sinn. Einfach die Libmbus, mosquitto und jq installieren. Das wars. Dann reicht es das script wieder zu kopieren. Die MBus Geräte werden selber gesucht. Sollte auch problemlos mit USB ModBus Mastern funktionieren. Die Belastung der SD-Karte ist minimal. Wenn man die auch weg haben will und einem Logs egal sind, einfach mit einer Ram Disk konfigurieren 😉

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                864
                                Online

                                31.9k
                                Users

                                80.2k
                                Topics

                                1.3m
                                Posts

                                2
                                19
                                1035
                                Loading More Posts
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes
                                Reply
                                • Reply as topic
                                Log in to reply
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                The ioBroker Community 2014-2023
                                logo