[Anleitung] Pipersberg G4 RF1 c Gaszähler an ip-Symcon

Dieses Thema wird viel im Internet diskutiert und es gibt sicherlich viele Lösungen, ich möchte an dieser Stelle meine präsentieren.
Das Problem mit dem G4 RF1 c ist, dass dieser nicht per Reed Kontakt ausgelesen werden kann, sondern hier sich nur ein Metallplättchen dreht und man diesen per Induktiven Näherungsschalter auslesen muss.
Im Datenblatt des Herstellers ist das ganz gut beschrieben https://www.pipersberg.de/wp-content/uploads/2017/09/Gas_82_Technische-Daten-RF1-G4G6.pdf
Das Originalteil des Herstellers kostet um die 80€.
Günstiger ist es mit meiner Lösung und dem LJ12A3-4-Z/BX (ca. 4€)

Meine Schaltung ist wie folgt aufgebaut (es ist mein erster fritzing Versuch und genau den Sensor gab es nicht, daher ein anderer) . Eigentlich recht simpel.

Das größte Problem ist, den Sensor so an den Gaszähler „dran zu halten“, dass dieser den Impuls auch mitbekommt. Dies erfordert sehr viel Fummelarbeit, Messarbeit und Nachjustage.
Meine Lösung ist aus wunderschönem Weißbuchenholz :wink:

Ich Nutze für die Übertragung rpi–> Symcon die JSON Schnittstelle.
Auf dem RPI läuft folgendes Python Script:

from gpiozero import Button
import datetime
import time
from time import sleep
import requests, json
from requests.auth import HTTPBasicAuth
from signal import pause
import urllib2



from time import sleep

def IpsRpc(methodIps, paramIps):
    url = "http://[IPSYMCONIP]:3777/api/"
    auth=HTTPBasicAuth('USERNAME', 'PASSWORD')   #beideses im Klartext
    headers = {'content-type': 'application/json'}

    payload = {
        "method": methodIps,
        "params": paramIps,
        "jsonrpc": "2.0",
        "id": "0",
    }

    response = requests.post(url, auth=auth, data=json.dumps(payload), headers=headers).json



button = Button(4)

while True:
        button.wait_for_press()
        datetime.datetime.now().strftime("%a, %d %B %Y %H:%M:%S")
        print(datetime.datetime.now())
        print("UND wieder ein m3 mehr Gas verbraucht - Script ausfuehren")
        IpsRpc("IPS_RunScript", [30670])
        button.wait_for_release() #sehr wichtig, da sonst das Script dauerhaft ausgeführt wird, wenn der Gaszähler mal wieder auf dem Impuls stehen bleibt

Auf dem IPS wird folgendes Script ausgeführt welches dann die Variable jeweils um 0,01 hochzählt (der Impulswert steht auf dem Gaszähler drauf)

<?

$derzeitigerwert = GetValue(55140);
#echo "Gaszählerwert: ".$derzeitigerwert;
$neuerwert = SetValue(55140, $derzeitigerwert+0.01);


?>

Ich habe dann noch ein weiteres Script laufen, welches mit den Wert des Gaszählers welcher in Kubikmeter angegeben wird in Kilowattstunden umrechnen usw. Die Energieversorger rechnen nämlich in KWH Stunden ab. Der Umrechenwert ist beim lokalen Versorger zu Erfragen bei mir 1 zu 9,5

<?
#Wert vom Gaszähler in m³ umrechnen in Kilowattstunden (laut Stadtwerke Brennwert von 9,5)
$gaskbm = GetValue(55140); 
#echo $gaskbm;
$gaskwh = $gaskbm * 9.5;
#echo $gaskwh;
SetValue(19508, $gaskwh);
#echo GetValue(19508);

########################################
#Ab hier: setzen des Zählerstandes. Ausgangswert war 9076.96
########################################
$gaszaehleralt = 9078.96;
$gaszaehlerneu = $gaszaehleralt + $gaskbm = GetValue(55140);
SetValue(34319, $gaszaehlerneu);



#########################################
#verbrauch gestern
#########################################

$gesternverbrauch = AC_GetAggregatedValues(21890, 55140, 0 /* Stündlich */, strtotime("yesterday 00:00"), strtotime("today 00:00")-1, 0); 


foreach($gesternverbrauch as $wert) {

$summe=$summe+$wert['Avg'];
}

SetValue(14106,$summe);

#########################################
#kbm Verbrauch von gestern in kwh umrechnen und in Variable schreiben
#########################################
$gaskbm_gestern = GetValue(14106); 
#echo $gaskbm;
$gaskwh_gestern = $gaskbm_gestern * 9.5;
#echo $gaskwh;
SetValue(50232, $gaskwh_gestern);
?>

Ich hoffe, dass ich hiermit jemandem weiterhelfen kann oder jemand hierdurch Anregungen für ein neues Projekt bekommt!

Gruß
Suner