Arduino 6fach S0-Stromzähler per LAN: HB-ES-S0-CNT6 Abwandlung

Begonnen von Blablubblaber, 02 August 2024, 11:44:47

Vorheriges Thema - Nächstes Thema

Blablubblaber

Hallo,
ich habe eine tolle Lösung gefunden um meine S0 Zähler in FHEM zu bringen und dachte mir das vielleicht noch jemand daran Interesse haben könnte.

Gefunden habe ich in GitHub eine Anleitung für ein S0 Zähler der in HomeMatic per LAN integriert werden kann. (Siehe: https://github.com/TomMajor/SmartHome/tree/master/HB-ES-S0-CNT6).

Bei genauerer Betrachtung habe ich dann irgendwann beschlossen das ganze sehr einfach direkt in FHEM einzubinden und mir den Umweg über HomeMatic zu sparen.
Da meine Programmierfähigkeiten leider nicht ausreichen um ein ganzes Modul zu bauen habe ich das ganze per HTTPMOD und UserReadings umgesetzt.

Da es den Arduino aus der ursprünglichen Anleitung so nicht mehr Offiziell gibt und das LAN Modul auch nicht einfach steckbar ist habe ich gedacht der Einfachheit halber baue ich es mit einem Arduino UNO R3 und einem Arduino Ethernet Shield 2 auf. Das gute dabei ist das man das ursprüngliche Programm nicht ändern muss (außer Netzwerk Adresse und Mac Adresse siehe unten) und alles einfach zusammenstecken kann was den Arbeitsaufwand doch ein ganzes stück reduziert.

Verwendete Komponenten:

Arduino: https://www.reichelt.de/arduino-uno-rev-3-dip-variante-atmega328-usb-arduino-uno-dip-p154902.html

Ethernet Shield: https://www.reichelt.de/arduino-shield-ethernet-shield-2-ohne-poe-w5500-arduino-shd-eth2-p159410.html

Netzteil: https://www.amazon.de/dp/B06XWQSJGW

USB Adapter: https://www.amazon.de/dp/B0CL9FK8CD

USB Kabel: https://www.amazon.de/dp/B01JP6PZO0

Hutschienenhalterung: https://www.amazon.de/dp/B0CQ5L6JXZ

S0 Zähler: https://www.amazon.de/dp/B07CSQ5GBB


Nun zur Anleitung (Beschreibungen sind aus der Ursprünglichen Anleitung von TomMajor kopiert und teilweise ergänzt und angepasst)

Arduino:

  • im Sketch ab Zeile 35 die IP-Adresse und Gateway des Gerätes an eigenen Bedarf anpassen:
  • byte mac[]    = { 0x90, 0xA2, 0xDA, 0x0D, 0x85, 0xD9 };    // physical mac address
    byte ip[]      = { 192, 168, 1, 227 };                      // ip in lan
    byte subnet[]  = { 255, 255, 255, 0 };                      // subnet mask
    byte gateway[] = { 192, 168, 1, 1 };                        // default gateway
  • den Sketch auf den Arduino flashen.
  • Betriebsspannung und Ethernet anschließen.
  • im Browser prüfen ob Gerät über Ethernet erreichbar ist,
    die Website mit den Zählern:
    http://192.168.1.227/counter
    die Website mit Debuginformationen:
    http://192.168.1.227/debug
  • die S0 Eingänge mit den S0-Ausgängen der Wechselstromzähler verbinden, dabei auf richtige Polung achten, jeder S0 Kreis hat einen + und - Anschluß.


FHEM

  • HTTPMOD Device Anlegen: define Arduino_Zaehler HTTPMOD http://192.168.1.227/counter 10
  • Attribute:
    je nach dem wie viele S0 Zähler man angeschlossen hat
    userattr: reading01Name reading01Regex reading02Name reading02Regex
    anlegen
  • Userdefined Readings benennen:
    reading01Name: Counter_1
    reading01Regex: Counter_1,(\d+.\w+)
    reading02Name: Counter_2
    reading02Regex: Counter_2,(\d+.\w+)
  • oldreadings: Counter_1,Counter_2,oldreadingsAlways
  • UserReadings:
    Zaehler1  {sprintf("%.2f",ReadingsNum("Arduino_Zaehler","Counter_1","",)/1000)." kWh"},
    Zaehler1_lastCnt {OldReadingsNum("Arduino_Zaehler","Counter_1","",)},
    Zaehler1_diffCnt {ReadingsNum("Arduino_Zaehler","Counter_1","",)-ReadingsNum("Arduino_Zaehler","Zaehler1_lastCnt","",)},
    Zaehler1_Power {(3600000*ReadingsNum("Arduino_Zaehler","Zaehler1_diffCnt","",))/(1000*10)." W"},


    Zaehler2  {sprintf("%.2f",ReadingsNum("Arduino_Zaehler","Counter_2","",)/1000)." kWh"},
    Zaehler2_lastCnt {OldReadingsNum("Arduino_Zaehler","Counter_2","",)},
    Zaehler2_diffCnt {ReadingsNum("Arduino_Zaehler","Counter_2","",)-ReadingsNum("Arduino_Zaehler","Zaehler2_lastCnt","",)},
    Zaehler2_Power {(3600000*ReadingsNum("Arduino_Zaehler","Zaehler2_diffCnt","",))/(1000*10)." W"},

Nun hat man als Readings im Device einmal den Zählerwert in kWh sowie den Aktuellen Verbrauchswert in W.
Der aktuelle Verbrauchswert in W ist jedoch leider aufgrund der Auflösung eher als grober Richtwert zu interpretieren.

Bedanken will ich mich an dieser stelle auch noch bei Tom Major für die tolle Vorlage und die saubere Dokumentation.

Ich hoffe alles sauber und verständlich beschrieben zu haben und hoffe damit dem ein oder anderen eine hilfreiche Lösung zu bieten.