Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Off Topic
  4. Microcontroller
  5. Hilfe bei Gaszähler > Reed > InfluxDB > Grafana

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Hilfe bei Gaszähler > Reed > InfluxDB > Grafana

Scheduled Pinned Locked Moved Microcontroller
40 Posts 6 Posters 3.6k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • MartinPM MartinP

    @marc-berg Bei meinem Gaszähler ist das kreisende Metallteil im Zähler kein Magnet, der induktive Näherungsschalter hat die Angewohnheit viele Fehl-Übergänge zu detektieren. Ich habe den Mindest-Abstand der Pulse schon auf 10 Sekunden gesetzt.
    Auswertung nicht mehr mit Tasmota-Zählern, sondern per Blockly

    a991f584-e04d-4c8c-a7f0-6e05ba627e0f-grafik.png

    Pro Tag ca. 1...3 Fehl Impulse (überzählig)

    Wenn ioBroker oder der LXC-Container neu gestartet werden muss, gehen natürlich auch Pulse verloren, und es muss ein neuer Start-Kubikmeter-Stand für den Puls-Zähler ermittelt werden..

    M Offline
    M Offline
    Markus 7
    wrote on last edited by Markus 7
    #13

    @seppele : Vielleicht als kleine Hilfestellung, da ich genau vor der gleichen Herausforderung stand:

    Ich habe mir manuelle Datenpunkte mit den entsprechenden Variablen wie Gaspreis, Zustandszahl etc. gesetzt:

    5665acfc-5de0-427a-87bf-22f31cb6ba35-image.png

    Dann über Alias den Impuls vom Reedkontakt abgegriffen:

    b38bb214-db2e-4fef-85f9-bbcfcce63513-image.png

    Dann über Blockly die entsprechenden Berechnungen gemacht:

    ae0fc088-e651-4417-b30d-6280cc1068f5-image.png

    Und abschließend die Werte über InfluxDB in Grafana geschaufelt:

    f5cd9c5b-b3a9-4281-b37c-6c87853ee21f-image.png

    S 1 Reply Last reply
    0
    • M Markus 7

      @seppele : Vielleicht als kleine Hilfestellung, da ich genau vor der gleichen Herausforderung stand:

      Ich habe mir manuelle Datenpunkte mit den entsprechenden Variablen wie Gaspreis, Zustandszahl etc. gesetzt:

      5665acfc-5de0-427a-87bf-22f31cb6ba35-image.png

      Dann über Alias den Impuls vom Reedkontakt abgegriffen:

      b38bb214-db2e-4fef-85f9-bbcfcce63513-image.png

      Dann über Blockly die entsprechenden Berechnungen gemacht:

      ae0fc088-e651-4417-b30d-6280cc1068f5-image.png

      Und abschließend die Werte über InfluxDB in Grafana geschaufelt:

      f5cd9c5b-b3a9-4281-b37c-6c87853ee21f-image.png

      S Offline
      S Offline
      seppele
      wrote on last edited by
      #14

      Vielen Dank euch alle dass ihr mich so unterstützt!!

      @markus-7 meinst du er wäre möglich das du mit das blockly script und das dashboard von grafana zur verfügung stellst damit ich das als referenz verwenden kann und für meine bedürfnisse umbauen kann?
      Wenn man was nachvollziehen kann kapiert man deutlich schneller 😀
      Wenn nicht ist das natürlich auch vollkommen ok und ich danke dir für die Auflistung!

      M 1 Reply Last reply
      0
      • S seppele

        Vielen Dank euch alle dass ihr mich so unterstützt!!

        @markus-7 meinst du er wäre möglich das du mit das blockly script und das dashboard von grafana zur verfügung stellst damit ich das als referenz verwenden kann und für meine bedürfnisse umbauen kann?
        Wenn man was nachvollziehen kann kapiert man deutlich schneller 😀
        Wenn nicht ist das natürlich auch vollkommen ok und ich danke dir für die Auflistung!

        M Offline
        M Offline
        Markus 7
        wrote on last edited by Markus 7
        #15

        @seppele

        Natürlich, das ist kein Problem:

        Nochmal zuerst meine Vorgehensweise:

        1. Abgreifen der Impulse analogen Zählwerk des Gaszählers mittels Reedkontakt. Meine, es ist die vorletzte Stelle des Zählwerkes, dass aber dann testen und ausprobieren)
        2. Den Impuls über den Schalter-Eingang eines Shellys abgreifen (bei mir über MQTT)
        3. Über ein Blockly die Statusänderung des Shellys abgreifen (= Zählwerk-Umdrehung) und in den Verbräuchen m3, kWh und EUR aufsummieren.

        c9642e0d-17b4-4821-a3c0-2c8e2c0d1d61-image.png

        <block xmlns="https://developers.google.com/blockly/xml" type="on_ext" id="p|rxBglyht9*Em{vW+i]" x="-1187" y="-836">
          <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
          <field name="CONDITION">any</field>
          <field name="ACK_CONDITION"></field>
          <value name="OID0">
            <shadow type="field_oid" id="h,~q9gADA6$E~GUO4tt{">
              <field name="oid">mqtt.0.Strom_Gastherme_Solarthermie_ShellyPlus2pm.status.input:0</field>
            </shadow>
          </value>
          <statement name="STATEMENT">
            <block type="update" id="eL28Vxm14qEa{ti-/1*J">
              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
              <field name="OID">0_userdata.0.2_Gas_G.2_2_G_Zähler.G_Verbrauch_m3</field>
              <field name="WITH_DELAY">FALSE</field>
              <value name="VALUE">
                <block type="math_rndfixed" id=".x{Z?kn}cz.DZ.FV5TnI">
                  <field name="n">3</field>
                  <value name="x">
                    <shadow type="math_number" id=",n}IjByak[yb!LCB{6[L">
                      <field name="NUM">3.1234</field>
                    </shadow>
                    <block type="math_arithmetic" id="l8i9[#Y2PA1GO|AGS1ES">
                      <field name="OP">ADD</field>
                      <value name="A">
                        <shadow type="math_number" id=";upHQ4m:GS.ANRrWdMWp">
                          <field name="NUM">1</field>
                        </shadow>
                        <block type="get_value" id="M`5@(`Q8-1ind)9lA,k!">
                          <field name="ATTR">val</field>
                          <field name="OID">0_userdata.0.2_Gas_G.2_2_G_Zähler.G_Verbrauch_m3</field>
                        </block>
                      </value>
                      <value name="B">
                        <shadow type="math_number" id="w7p*K);K|cRA|[qAU*Q6">
                          <field name="NUM">0.005</field>
                        </shadow>
                      </value>
                    </block>
                  </value>
                </block>
              </value>
              <next>
                <block type="update" id="]YMIUu|j;5/nEvEU[{SJ">
                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                  <field name="OID">0_userdata.0.2_Gas_G.2_2_G_Zähler.G_Verbrauch_kWh</field>
                  <field name="WITH_DELAY">FALSE</field>
                  <value name="VALUE">
                    <block type="math_rndfixed" id="E?L}n4lYNIe+vxxlYkeM">
                      <field name="n">4</field>
                      <value name="x">
                        <shadow type="math_number" id="WWoHV9r4g%YogY)5Tv*}">
                          <field name="NUM">3.1234</field>
                        </shadow>
                        <block type="math_arithmetic" id=";v)}2Z!w*OHIV-|4$l2e">
                          <field name="OP">MULTIPLY</field>
                          <value name="A">
                            <shadow type="math_number" id="U]]HkK|*N([O`Q.ehM[.">
                              <field name="NUM">1</field>
                            </shadow>
                            <block type="get_value" id="Mfw*%e39RM9igl`!gW.6">
                              <field name="ATTR">val</field>
                              <field name="OID">0_userdata.0.2_Gas_G.2_2_G_Zähler.G_Verbrauch_m3</field>
                            </block>
                          </value>
                          <value name="B">
                            <shadow type="math_number" id="puF9xJy00eL6OXwrETM@">
                              <field name="NUM">1</field>
                            </shadow>
                            <block type="math_arithmetic" id="CfVuwA)O=J;dSaAlVRF7">
                              <field name="OP">MULTIPLY</field>
                              <value name="A">
                                <shadow type="math_number" id="AnLSZK)]Gy6XvY@bq}C1">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="get_value" id="USnrUs7H#1D~C#Icf7BT">
                                  <field name="ATTR">val</field>
                                  <field name="OID">0_userdata.0.2_Gas_G.2_1_G_Preis.G_Brennwert_20230520</field>
                                </block>
                              </value>
                              <value name="B">
                                <shadow type="math_number" id="G|=SGw}./wa4k#IV~HzG">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="get_value" id="pv?fs.`5QG!a]9CC=.vq">
                                  <field name="ATTR">val</field>
                                  <field name="OID">0_userdata.0.2_Gas_G.2_1_G_Preis.G_Zustandszahl_20230520</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </value>
                  <next>
                    <block type="update" id="c`;mgL@KAnKIW/apislC">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">0_userdata.0.2_Gas_G.2_2_G_Zähler.G_Verbrauch_EUR</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="math_rndfixed" id="_!:Y%feK=I4b!33u*I-)">
                          <field name="n">2</field>
                          <value name="x">
                            <shadow type="math_number" id="V-17vzNaWhjv1N|N/vy6">
                              <field name="NUM">3.1234</field>
                            </shadow>
                            <block type="math_arithmetic" id="%7IPv/dyfb=L7vnwM2|_">
                              <field name="OP">MULTIPLY</field>
                              <value name="A">
                                <shadow type="math_number" id="Rh.v#}#8ddb@lWAh#0]/">
                                  <field name="NUM">1</field>
                                </shadow>
                                <block type="get_value" id="BV$Q1A5YT^B+a0xBC#{s">
                                  <field name="ATTR">val</field>
                                  <field name="OID">0_userdata.0.2_Gas_G.2_2_G_Zähler.G_Verbrauch_kWh</field>
                                </block>
                              </value>
                              <value name="B">
                                <shadow type="math_number" id="A=Gi,82yPW1gvT@:)S(G">
                                  <field name="NUM">0</field>
                                </shadow>
                                <block type="get_value" id="{O{J{Q@Ry!ure]ud*BJ$">
                                  <field name="ATTR">val</field>
                                  <field name="OID">0_userdata.0.2_Gas_G.2_1_G_Preis.G_Preis_kWh_20230520</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </value>
                    </block>
                  </next>
                </block>
              </next>
            </block>
          </statement>
        </block>
        

        Wie ich gerade bemerke, greife ich im Blockly direkt den Shelly ("Statusänderung") ab und nicht wie vorher geschrieben den extra dafür eingerichteten Alias, der aus der Shelly-MQTT-Ausgabe "{"id":0,"state":false}" den vereinfachten Datenpunkt "false" bzw. "true" setzt. Viele Wege führen nach Rom 😉

        1. Die in 3. aktualisierten Verbräuche an InfluxDB übergeben.

        704963be-9e53-4ccd-86ab-e3adcf22aa17-image.png

        In InfluxDB sieht die Abfrage dann so aus:

        from(bucket: "iobroker_0")
          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "G_Verbrauch_m3")
          |> filter(fn: (r) => r["_field"] == "value")
          |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
          |> yield(name: "mean")
        
        1. In Grafana dann die InfluxDB Abfrage in verschiedene Ansichten, Diagramme etc. einbinden. Bei mir ist das ganze noch ziemlich "work in progress", ich bin immer noch am rumspielen.
        {
          "annotations": {
            "list": [
              {
                "builtIn": 1,
                "datasource": {
                  "type": "grafana",
                  "uid": "-- Grafana --"
                },
                "enable": true,
                "hide": true,
                "iconColor": "rgba(0, 211, 255, 1)",
                "name": "Annotations & Alerts",
                "type": "dashboard"
              }
            ]
          },
          "editable": true,
          "fiscalYearStartMonth": 0,
          "graphTooltip": 0,
          "id": 9,
          "links": [],
          "liveNow": false,
          "panels": [
            {
              "datasource": {
                "type": "influxdb",
                "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
              },
              "fieldConfig": {
                "defaults": {
                  "color": {
                    "mode": "thresholds"
                  },
                  "decimals": 3,
                  "mappings": [],
                  "thresholds": {
                    "mode": "absolute",
                    "steps": [
                      {
                        "color": "green",
                        "value": null
                      },
                      {
                        "color": "red",
                        "value": 80
                      }
                    ]
                  },
                  "unit": "m3"
                },
                "overrides": []
              },
              "gridPos": {
                "h": 4,
                "w": 2,
                "x": 0,
                "y": 0
              },
              "id": 4,
              "options": {
                "colorMode": "value",
                "graphMode": "none",
                "justifyMode": "auto",
                "orientation": "auto",
                "reduceOptions": {
                  "calcs": [
                    "lastNotNull"
                  ],
                  "fields": "",
                  "values": false
                },
                "textMode": "auto"
              },
              "pluginVersion": "10.0.3",
              "targets": [
                {
                  "datasource": {
                    "type": "influxdb",
                    "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
                  },
                  "query": "from(bucket: \"iobroker_0\")\r\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n  |> filter(fn: (r) => r[\"_measurement\"] == \"G_Verbrauch_m3\")\r\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n  |> yield(name: \"mean\")",
                  "refId": "A"
                }
              ],
              "title": "Zählerstand",
              "type": "stat"
            },
            {
              "datasource": {
                "type": "influxdb",
                "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
              },
              "fieldConfig": {
                "defaults": {
                  "color": {
                    "mode": "thresholds"
                  },
                  "mappings": [],
                  "thresholds": {
                    "mode": "absolute",
                    "steps": [
                      {
                        "color": "green",
                        "value": null
                      }
                    ]
                  },
                  "unit": "kwatth"
                },
                "overrides": []
              },
              "gridPos": {
                "h": 4,
                "w": 2,
                "x": 2,
                "y": 0
              },
              "id": 3,
              "options": {
                "colorMode": "value",
                "graphMode": "none",
                "justifyMode": "auto",
                "orientation": "auto",
                "reduceOptions": {
                  "calcs": [
                    "lastNotNull"
                  ],
                  "fields": "",
                  "values": false
                },
                "textMode": "auto"
              },
              "pluginVersion": "10.0.3",
              "targets": [
                {
                  "datasource": {
                    "type": "influxdb",
                    "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
                  },
                  "query": "from(bucket: \"iobroker_0\")\r\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n  |> filter(fn: (r) => r[\"_measurement\"] == \"G_Verbrauch_kWh\")\r\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n  |> yield(name: \"mean\")",
                  "refId": "A"
                }
              ],
              "title": "Verbrauch",
              "type": "stat"
            },
            {
              "datasource": {
                "type": "influxdb",
                "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
              },
              "fieldConfig": {
                "defaults": {
                  "color": {
                    "mode": "thresholds"
                  },
                  "decimals": 2,
                  "mappings": [],
                  "thresholds": {
                    "mode": "absolute",
                    "steps": [
                      {
                        "color": "green",
                        "value": null
                      },
                      {
                        "color": "red",
                        "value": 80
                      }
                    ]
                  },
                  "unit": "EUR"
                },
                "overrides": []
              },
              "gridPos": {
                "h": 4,
                "w": 2,
                "x": 4,
                "y": 0
              },
              "id": 7,
              "options": {
                "colorMode": "value",
                "graphMode": "none",
                "justifyMode": "auto",
                "orientation": "auto",
                "reduceOptions": {
                  "calcs": [
                    "last"
                  ],
                  "fields": "",
                  "values": false
                },
                "textMode": "auto"
              },
              "pluginVersion": "10.0.3",
              "targets": [
                {
                  "datasource": {
                    "type": "influxdb",
                    "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
                  },
                  "query": "from(bucket: \"iobroker_0\")\r\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n  |> filter(fn: (r) => r[\"_measurement\"] == \"G_Verbrauch_EUR\")\r\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n  |> yield(name: \"mean\")",
                  "refId": "A"
                }
              ],
              "title": "Kosten",
              "type": "stat"
            },
            {
              "datasource": {
                "type": "influxdb",
                "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
              },
              "fieldConfig": {
                "defaults": {
                  "color": {
                    "mode": "thresholds"
                  },
                  "custom": {
                    "align": "auto",
                    "cellOptions": {
                      "type": "color-text"
                    },
                    "inspect": false,
                    "minWidth": 50,
                    "width": 100
                  },
                  "mappings": [],
                  "thresholds": {
                    "mode": "absolute",
                    "steps": [
                      {
                        "color": "green",
                        "value": null
                      }
                    ]
                  },
                  "unit": "currencyEUR"
                },
                "overrides": [
                  {
                    "matcher": {
                      "id": "byName",
                      "options": "Time"
                    },
                    "properties": [
                      {
                        "id": "unit",
                        "value": "time: DD.MM.YY"
                      }
                    ]
                  }
                ]
              },
              "gridPos": {
                "h": 12,
                "w": 3,
                "x": 12,
                "y": 0
              },
              "hideTimeOverride": true,
              "id": 6,
              "interval": "1d",
              "options": {
                "cellHeight": "sm",
                "footer": {
                  "countRows": false,
                  "fields": [
                    "value"
                  ],
                  "reducer": [
                    "sum"
                  ],
                  "show": true
                },
                "showHeader": false
              },
              "pluginVersion": "10.0.3",
              "targets": [
                {
                  "datasource": {
                    "type": "influxdb",
                    "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
                  },
                  "query": "import \"timezone\" option location = timezone.location(name:\"Europe/Berlin\")\r\nfrom(bucket: \"iobroker_0\")\r\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n  |> filter(fn: (r) => r[\"_measurement\"] == \"G_Verbrauch_EUR\")\r\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n  |> difference(nonNegative: true, columns: [\"_value\"], keepFirst: false)\r\n  |> aggregateWindow(every: 1d, fn: sum, createEmpty: false, timeSrc: \"_start\")\r\n  |> yield(name: \"difference\")",
                  "refId": "A"
                }
              ],
              "timeFrom": "now-12M",
              "title": "Gaskosten",
              "type": "table"
            },
            {
              "datasource": {
                "type": "influxdb",
                "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
              },
              "fieldConfig": {
                "defaults": {
                  "color": {
                    "mode": "palette-classic"
                  },
                  "custom": {
                    "axisCenteredZero": false,
                    "axisColorMode": "text",
                    "axisLabel": "",
                    "axisPlacement": "auto",
                    "barAlignment": 0,
                    "drawStyle": "line",
                    "fillOpacity": 0,
                    "gradientMode": "none",
                    "hideFrom": {
                      "legend": false,
                      "tooltip": false,
                      "viz": false
                    },
                    "lineInterpolation": "linear",
                    "lineWidth": 1,
                    "pointSize": 5,
                    "scaleDistribution": {
                      "type": "linear"
                    },
                    "showPoints": "auto",
                    "spanNulls": false,
                    "stacking": {
                      "group": "A",
                      "mode": "none"
                    },
                    "thresholdsStyle": {
                      "mode": "off"
                    }
                  },
                  "mappings": [],
                  "thresholds": {
                    "mode": "absolute",
                    "steps": [
                      {
                        "color": "green",
                        "value": null
                      },
                      {
                        "color": "red",
                        "value": 80
                      }
                    ]
                  }
                },
                "overrides": []
              },
              "gridPos": {
                "h": 8,
                "w": 12,
                "x": 0,
                "y": 4
              },
              "id": 1,
              "options": {
                "legend": {
                  "calcs": [],
                  "displayMode": "list",
                  "placement": "bottom",
                  "showLegend": true
                },
                "tooltip": {
                  "mode": "single",
                  "sort": "none"
                }
              },
              "targets": [
                {
                  "datasource": {
                    "type": "influxdb",
                    "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
                  },
                  "query": "from(bucket: \"iobroker_0\")\r\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n  |> filter(fn: (r) => r[\"_measurement\"] == \"G_Verbrauch_kWh\")\r\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\r\n  |> yield(name: \"mean\")",
                  "refId": "A"
                }
              ],
              "title": "Gasverbrauch [kWh]",
              "type": "timeseries"
            },
            {
              "datasource": {
                "type": "influxdb",
                "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
              },
              "fieldConfig": {
                "defaults": {
                  "color": {
                    "mode": "palette-classic"
                  },
                  "custom": {
                    "axisCenteredZero": false,
                    "axisColorMode": "text",
                    "axisLabel": "",
                    "axisPlacement": "auto",
                    "fillOpacity": 80,
                    "gradientMode": "opacity",
                    "hideFrom": {
                      "legend": false,
                      "tooltip": false,
                      "viz": false
                    },
                    "lineWidth": 1,
                    "scaleDistribution": {
                      "type": "linear"
                    },
                    "thresholdsStyle": {
                      "mode": "off"
                    }
                  },
                  "mappings": [],
                  "max": 20,
                  "thresholds": {
                    "mode": "absolute",
                    "steps": [
                      {
                        "color": "green",
                        "value": null
                      }
                    ]
                  },
                  "unit": "kwatth"
                },
                "overrides": [
                  {
                    "matcher": {
                      "id": "byName",
                      "options": "Time"
                    },
                    "properties": [
                      {
                        "id": "unit",
                        "value": "time: DD:MMM"
                      }
                    ]
                  }
                ]
              },
              "gridPos": {
                "h": 14,
                "w": 24,
                "x": 0,
                "y": 12
              },
              "id": 2,
              "options": {
                "barRadius": 0,
                "barWidth": 0.86,
                "fullHighlight": false,
                "groupWidth": 0.7,
                "legend": {
                  "calcs": [],
                  "displayMode": "list",
                  "placement": "bottom",
                  "showLegend": false
                },
                "orientation": "auto",
                "showValue": "auto",
                "stacking": "none",
                "tooltip": {
                  "mode": "single",
                  "sort": "none"
                },
                "xField": "Time",
                "xTickLabelRotation": 90,
                "xTickLabelSpacing": 0
              },
              "pluginVersion": "10.0.3",
              "targets": [
                {
                  "datasource": {
                    "type": "influxdb",
                    "uid": "fe8a6018-4149-4ba0-b895-92b7c98d857e"
                  },
                  "query": "  import \"timezone\" option location = timezone.location(name:\"Europe/Berlin\")\r\n  from(bucket: \"iobroker_0\")\r\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\r\n  |> filter(fn: (r) => r[\"_measurement\"] == \"G_Verbrauch_kWh\")\r\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\r\n  |> difference(nonNegative: true, columns: [\"_value\"], keepFirst: false)\r\n  |> aggregateWindow(every: 1d, fn: sum, createEmpty: true, timeSrc: \"_start\")\r\n  |> yield(name: \"difference\")",
                  "refId": "A"
                }
              ],
              "title": "Gasverbrauch [kWh/Tag]",
              "type": "barchart"
            }
          ],
          "refresh": "",
          "schemaVersion": 38,
          "style": "dark",
          "tags": [],
          "templating": {
            "list": []
          },
          "time": {
            "from": "now-6M",
            "to": "now"
          },
          "timepicker": {},
          "timezone": "",
          "title": "Gasverbrauch",
          "uid": "e5ebcb70-ccf6-4a87-a6a9-af1401f51eac",
          "version": 18,
          "weekStart": ""
        }
        

        Hoffe das hilft dir ein bisschen weiter 🙂

        1 Reply Last reply
        0
        • S Offline
          S Offline
          seppele
          wrote on last edited by seppele
          #16

          Vielen vielen Dank @Markus-7
          das hat mir sehr weitergeholfen, war zwar den ganzen Tag nicht zuhause, konnte aber in kurzer Zeit schon einiges davon umsetzen.

          Hab als erstes die Datenpunkte angelegt, war eigentlich ganz einfach.
          gasverbrauch-datenpunkte.jpg

          Anschliessend hab ich dann ein Blockly Script anhanden deinem Bild nachgebaut mit meinen Datenpunkten.
          gasverbrauch-blockly-script-1.jpg

          Dann hab ich noch das speichern dens Datenpunkts die DB eingestellt.

          Und jetzt muss ich noch das Dashboard in Grafana zusammenbasteln.
          Da hab ich aber noch ein paar schwarze Flecken, diese Flux Query Language ist ja ggrauenhaft, hab das jetzt mal voin influxql umgestellt, jetzt geht zwar mein restliches Zeug nichtmehr aber egal mann muss ja auch mal mit der Zeit gehen.

          Jedenfalls brauche ich noch ein paar Infos:
          Wie finde ich das passende Bucket meins Datenpunkts, hier mal ein Beispiel Datenpunkt:

          {
            "common": {
              "name": "Zaehlerstand_m3",
              "desc": "Manuell erzeugt",
              "role": "state",
              "type": "number",
              "read": true,
              "write": true,
              "def": 0,
              "custom": {
                "influxdb.0": {
                  "enabled": true,
                  "storageType": "",
                  "aliasId": "Zaehlerstand_m3",
                  "debounceTime": 0,
                  "blockTime": 0,
                  "changesOnly": true,
                  "changesRelogInterval": 0,
                  "changesMinDelta": 0,
                  "ignoreBelowNumber": "",
                  "disableSkippedValueLogging": false,
                  "enableDebugLogs": false,
                  "debounce": 1000
                }
              }
            },
            "type": "state",
            "native": {},
            "_id": "0_userdata.0.Gas.Zaehlerstand_m3",
            "acl": {
              "object": 1636,
              "state": 1636,
              "owner": "system.user.admin",
              "ownerGroup": "system.group.administrator"
            },
            "from": "system.adapter.admin.0",
            "user": "system.user.admin",
            "ts": 1708875595753
          }
          

          Wäre hier das Bucket das ich in der Query verwenden müsste influxdb.0

          Wenn ich jetzt deine Abfrage auf mein Feld anwenden wollte müsste ich das dann so ändern: (cih habe den ganzen ID Pfad da genommen, oder reicht da diese aliasid auch aus?)

          from(bucket: "influxdb.0")
            |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
            |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Gas.Zaehlerstand_m3")
            |> filter(fn: (r) => r["_field"] == "value")
            |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
            |> yield(name: "mean")
          

          Jedenfalls bin ich schon weit gekommen und hab viel gelernt, diese Datenpunkte und die einfache Handhabung mit Blockly eröffnen ja extreme Möglichkeiten 🙂

          M 1 Reply Last reply
          1
          • S seppele

            Vielen vielen Dank @Markus-7
            das hat mir sehr weitergeholfen, war zwar den ganzen Tag nicht zuhause, konnte aber in kurzer Zeit schon einiges davon umsetzen.

            Hab als erstes die Datenpunkte angelegt, war eigentlich ganz einfach.
            gasverbrauch-datenpunkte.jpg

            Anschliessend hab ich dann ein Blockly Script anhanden deinem Bild nachgebaut mit meinen Datenpunkten.
            gasverbrauch-blockly-script-1.jpg

            Dann hab ich noch das speichern dens Datenpunkts die DB eingestellt.

            Und jetzt muss ich noch das Dashboard in Grafana zusammenbasteln.
            Da hab ich aber noch ein paar schwarze Flecken, diese Flux Query Language ist ja ggrauenhaft, hab das jetzt mal voin influxql umgestellt, jetzt geht zwar mein restliches Zeug nichtmehr aber egal mann muss ja auch mal mit der Zeit gehen.

            Jedenfalls brauche ich noch ein paar Infos:
            Wie finde ich das passende Bucket meins Datenpunkts, hier mal ein Beispiel Datenpunkt:

            {
              "common": {
                "name": "Zaehlerstand_m3",
                "desc": "Manuell erzeugt",
                "role": "state",
                "type": "number",
                "read": true,
                "write": true,
                "def": 0,
                "custom": {
                  "influxdb.0": {
                    "enabled": true,
                    "storageType": "",
                    "aliasId": "Zaehlerstand_m3",
                    "debounceTime": 0,
                    "blockTime": 0,
                    "changesOnly": true,
                    "changesRelogInterval": 0,
                    "changesMinDelta": 0,
                    "ignoreBelowNumber": "",
                    "disableSkippedValueLogging": false,
                    "enableDebugLogs": false,
                    "debounce": 1000
                  }
                }
              },
              "type": "state",
              "native": {},
              "_id": "0_userdata.0.Gas.Zaehlerstand_m3",
              "acl": {
                "object": 1636,
                "state": 1636,
                "owner": "system.user.admin",
                "ownerGroup": "system.group.administrator"
              },
              "from": "system.adapter.admin.0",
              "user": "system.user.admin",
              "ts": 1708875595753
            }
            

            Wäre hier das Bucket das ich in der Query verwenden müsste influxdb.0

            Wenn ich jetzt deine Abfrage auf mein Feld anwenden wollte müsste ich das dann so ändern: (cih habe den ganzen ID Pfad da genommen, oder reicht da diese aliasid auch aus?)

            from(bucket: "influxdb.0")
              |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
              |> filter(fn: (r) => r["_measurement"] == "0_userdata.0.Gas.Zaehlerstand_m3")
              |> filter(fn: (r) => r["_field"] == "value")
              |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
              |> yield(name: "mean")
            

            Jedenfalls bin ich schon weit gekommen und hab viel gelernt, diese Datenpunkte und die einfache Handhabung mit Blockly eröffnen ja extreme Möglichkeiten 🙂

            M Offline
            M Offline
            Markus 7
            wrote on last edited by
            #17

            @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

            Wie finde ich das passende Bucket meins Datenpunkts, hier mal ein Beispiel Datenpunkt:

            Ich weiß nicht, ob ich dich richtig verstehe, denn unter "Bucket" habe ich nur ein einziges, in das mir alle Daten von ioBroker reingeschaufelt werden. Man kann aber auch bei größeren bzw. sehr vielen Datenpunkten auch mehrere Buckets definieren. Und das Bucket definierst du ja in ioBroker selbst in der influxdb.0 Instanz (hier "DB Name" genannt):

            b71a9295-0687-4c5c-a409-31ea94f65abb-image.png

            In InfluxDB selber gehe ich diesen Weg, um die richtige Abfrage zu finden:

            f14bf79f-4f53-44da-abdf-984e7d2f68be-image.png

            Das ergibt dann diese Abfrage, die ich mit copy&paste in Grafana einfüge:

            a492ce93-620f-476b-bf86-c3d35c8488b1-image.png

            282386ef-a681-40a4-8eef-a6bd2f645980-image.png

            S MartinPM 2 Replies Last reply
            0
            • M Markus 7

              @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

              Wie finde ich das passende Bucket meins Datenpunkts, hier mal ein Beispiel Datenpunkt:

              Ich weiß nicht, ob ich dich richtig verstehe, denn unter "Bucket" habe ich nur ein einziges, in das mir alle Daten von ioBroker reingeschaufelt werden. Man kann aber auch bei größeren bzw. sehr vielen Datenpunkten auch mehrere Buckets definieren. Und das Bucket definierst du ja in ioBroker selbst in der influxdb.0 Instanz (hier "DB Name" genannt):

              b71a9295-0687-4c5c-a409-31ea94f65abb-image.png

              In InfluxDB selber gehe ich diesen Weg, um die richtige Abfrage zu finden:

              f14bf79f-4f53-44da-abdf-984e7d2f68be-image.png

              Das ergibt dann diese Abfrage, die ich mit copy&paste in Grafana einfüge:

              a492ce93-620f-476b-bf86-c3d35c8488b1-image.png

              282386ef-a681-40a4-8eef-a6bd2f645980-image.png

              S Offline
              S Offline
              seppele
              wrote on last edited by
              #18

              @markus-7 das war genau mrine Frage!! 😀
              Den Dataexplorer hab ich noch nicht gefunden, vielleicht muss ich mein grafana updaten, ich hab ja nur die Query Language umgestellt.

              Probier ich morgen gleich aus. 👍

              M 1 Reply Last reply
              0
              • M Markus 7

                @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                Wie finde ich das passende Bucket meins Datenpunkts, hier mal ein Beispiel Datenpunkt:

                Ich weiß nicht, ob ich dich richtig verstehe, denn unter "Bucket" habe ich nur ein einziges, in das mir alle Daten von ioBroker reingeschaufelt werden. Man kann aber auch bei größeren bzw. sehr vielen Datenpunkten auch mehrere Buckets definieren. Und das Bucket definierst du ja in ioBroker selbst in der influxdb.0 Instanz (hier "DB Name" genannt):

                b71a9295-0687-4c5c-a409-31ea94f65abb-image.png

                In InfluxDB selber gehe ich diesen Weg, um die richtige Abfrage zu finden:

                f14bf79f-4f53-44da-abdf-984e7d2f68be-image.png

                Das ergibt dann diese Abfrage, die ich mit copy&paste in Grafana einfüge:

                a492ce93-620f-476b-bf86-c3d35c8488b1-image.png

                282386ef-a681-40a4-8eef-a6bd2f645980-image.png

                MartinPM Online
                MartinPM Online
                MartinP
                wrote on last edited by MartinP
                #19

                @markus-7 said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                Ich weiß nicht, ob ich dich richtig verstehe, denn unter "Bucket" habe ich nur ein einziges, in das mir alle Daten von ioBroker reingeschaufelt werden.

                Es gibt schon Gründe für mehrere Buckets. Bisher habe ich nur eines, aber ggfs. werde ich mir ein Zweites mit deutlich längerer Retain Time anlegen, in das dann z.b. Tageswerte für Energieverbrauch kommen... Das aktuelle Bucket räumt alles ab, was älter, als 12 Monate ist...

                Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                kernel Linux pve 6.8.12-15-pve
                6 GByte RAM für den Container
                Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                Remote-Access über Wireguard der Fritzbox

                1 Reply Last reply
                1
                • S seppele

                  @markus-7 das war genau mrine Frage!! 😀
                  Den Dataexplorer hab ich noch nicht gefunden, vielleicht muss ich mein grafana updaten, ich hab ja nur die Query Language umgestellt.

                  Probier ich morgen gleich aus. 👍

                  M Offline
                  M Offline
                  Markus 7
                  wrote on last edited by
                  #20

                  @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                  Den Dataexplorer hab ich noch nicht gefunden, vielleicht muss ich mein grafana updaten,

                  Nur, dass wir nicht aneinander vorbeischreiben: Den Dataexplorer gibt es in InfluxDB, nicht in Grafana 😉

                  S 1 Reply Last reply
                  0
                  • M Markus 7

                    @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                    Den Dataexplorer hab ich noch nicht gefunden, vielleicht muss ich mein grafana updaten,

                    Nur, dass wir nicht aneinander vorbeischreiben: Den Dataexplorer gibt es in InfluxDB, nicht in Grafana 😉

                    S Offline
                    S Offline
                    seppele
                    wrote on last edited by seppele
                    #21

                    @markus-7 ich hab influx über die console installiert, ich glaub ich hab garkein webinterface dazu, wenn ich ip:8086 aufrufe bekommf ich nur „page not found“

                    das interface hätte alled deuhlich vereinfacht, hast du eine idee dazu? 🫣

                    Ich habe InfluxDB 1.6.7 installiert, muss ich das updaten?

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      Markus 7
                      wrote on last edited by
                      #22

                      @seppele

                      Leider kenne ich mich da nicht wirklich aus, da ich auch das meiste nur "stur nach Anleitung" installieren konnte.
                      Vielleicht hilft dir dieser Tread weiter: https://forum.iobroker.net/topic/39887/geklärt-problem-bei-influx-installation/33

                      Ansonsten müssten da mal hier die Profis ran, mir hat man auch schon viel (und erfolgreich) hier geholfen 🙂

                      S 1 Reply Last reply
                      0
                      • M Markus 7

                        @seppele

                        Leider kenne ich mich da nicht wirklich aus, da ich auch das meiste nur "stur nach Anleitung" installieren konnte.
                        Vielleicht hilft dir dieser Tread weiter: https://forum.iobroker.net/topic/39887/geklärt-problem-bei-influx-installation/33

                        Ansonsten müssten da mal hier die Profis ran, mir hat man auch schon viel (und erfolgreich) hier geholfen 🙂

                        S Offline
                        S Offline
                        seppele
                        wrote on last edited by seppele
                        #23

                        Bevor ich das InfluxDB Problem weiter behandle muss ich noch die Falschzählungen des Reedkontakts lösen.

                        Ich hab das Script wie gesagt aus dem Netz und hätte dazu ein paar Fragen, ich hoffe jemand kann mir dabei helfen.

                        Wozu brauch ich folgenden Part, hab kein Homeassistant laufen, konnte das durch google nicht lösen.
                        Kann ich das rauslöschen?

                        # Enable Home Assistant API
                        api:
                          encryption:
                            key: "2342+243532+234532="
                        

                        Jetzt zum eigentlichen Problem:
                        Aktuell zähle ich leider doppelt da ich mit einem Blockly Script bei Änderung des Status eine Zählung mache, da aber die Rückstellung von on auf off auch eine Änderung ist zähle ich jede Umdrehung doppelt.
                        Hier der Teil aus der esphome yaml der den Status erfasst:

                        # Reed Kontakt an GPIO5
                        binary_sensor:
                          - platform: gpio
                            name: "Gaszaehler"
                            id: Gaszaehler
                            pin:
                              number: 5
                              inverted: true
                              mode: INPUT_PULLUP
                            filters:
                              # debounce, delay um Doppelzählungen zu vermeiden
                              - delayed_off: 1s
                            on_press:
                              then:
                                - mqtt.publish:
                                    topic: esphome/Gaszaehler/Stand
                                    payload: id(Gaszaehler).state
                        

                        Ich hab noch nicht rausgefunden wie ich das am einfachsten löse.
                        Kann man in Blockly nicht sagen "wenn Wert == on > Zählen", dann würde er die Rückstellung auf off nicht beachten
                        gasverbrauch-blockly-script-1.jpg

                        Vielen Dank für eeure Tipps!

                        EDIT:
                        Was haltet ihr davon
                        79efd044-4938-4c72-b417-819b99480d7e-grafik.png

                        MartinPM M ubeckerU 3 Replies Last reply
                        0
                        • S seppele

                          Bevor ich das InfluxDB Problem weiter behandle muss ich noch die Falschzählungen des Reedkontakts lösen.

                          Ich hab das Script wie gesagt aus dem Netz und hätte dazu ein paar Fragen, ich hoffe jemand kann mir dabei helfen.

                          Wozu brauch ich folgenden Part, hab kein Homeassistant laufen, konnte das durch google nicht lösen.
                          Kann ich das rauslöschen?

                          # Enable Home Assistant API
                          api:
                            encryption:
                              key: "2342+243532+234532="
                          

                          Jetzt zum eigentlichen Problem:
                          Aktuell zähle ich leider doppelt da ich mit einem Blockly Script bei Änderung des Status eine Zählung mache, da aber die Rückstellung von on auf off auch eine Änderung ist zähle ich jede Umdrehung doppelt.
                          Hier der Teil aus der esphome yaml der den Status erfasst:

                          # Reed Kontakt an GPIO5
                          binary_sensor:
                            - platform: gpio
                              name: "Gaszaehler"
                              id: Gaszaehler
                              pin:
                                number: 5
                                inverted: true
                                mode: INPUT_PULLUP
                              filters:
                                # debounce, delay um Doppelzählungen zu vermeiden
                                - delayed_off: 1s
                              on_press:
                                then:
                                  - mqtt.publish:
                                      topic: esphome/Gaszaehler/Stand
                                      payload: id(Gaszaehler).state
                          

                          Ich hab noch nicht rausgefunden wie ich das am einfachsten löse.
                          Kann man in Blockly nicht sagen "wenn Wert == on > Zählen", dann würde er die Rückstellung auf off nicht beachten
                          gasverbrauch-blockly-script-1.jpg

                          Vielen Dank für eeure Tipps!

                          EDIT:
                          Was haltet ihr davon
                          79efd044-4938-4c72-b417-819b99480d7e-grafik.png

                          MartinPM Online
                          MartinPM Online
                          MartinP
                          wrote on last edited by
                          #24

                          @seppele Die zweite Lösung funktioniert. Übliche Lösung ist aber auch oben im Trigger statt ....

                          "wurde geändert"

                          "ist größer als voriger"

                          ... zu wählen,,,

                          Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                          Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                          kernel Linux pve 6.8.12-15-pve
                          6 GByte RAM für den Container
                          Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                          Remote-Access über Wireguard der Fritzbox

                          S 1 Reply Last reply
                          0
                          • S seppele

                            Bevor ich das InfluxDB Problem weiter behandle muss ich noch die Falschzählungen des Reedkontakts lösen.

                            Ich hab das Script wie gesagt aus dem Netz und hätte dazu ein paar Fragen, ich hoffe jemand kann mir dabei helfen.

                            Wozu brauch ich folgenden Part, hab kein Homeassistant laufen, konnte das durch google nicht lösen.
                            Kann ich das rauslöschen?

                            # Enable Home Assistant API
                            api:
                              encryption:
                                key: "2342+243532+234532="
                            

                            Jetzt zum eigentlichen Problem:
                            Aktuell zähle ich leider doppelt da ich mit einem Blockly Script bei Änderung des Status eine Zählung mache, da aber die Rückstellung von on auf off auch eine Änderung ist zähle ich jede Umdrehung doppelt.
                            Hier der Teil aus der esphome yaml der den Status erfasst:

                            # Reed Kontakt an GPIO5
                            binary_sensor:
                              - platform: gpio
                                name: "Gaszaehler"
                                id: Gaszaehler
                                pin:
                                  number: 5
                                  inverted: true
                                  mode: INPUT_PULLUP
                                filters:
                                  # debounce, delay um Doppelzählungen zu vermeiden
                                  - delayed_off: 1s
                                on_press:
                                  then:
                                    - mqtt.publish:
                                        topic: esphome/Gaszaehler/Stand
                                        payload: id(Gaszaehler).state
                            

                            Ich hab noch nicht rausgefunden wie ich das am einfachsten löse.
                            Kann man in Blockly nicht sagen "wenn Wert == on > Zählen", dann würde er die Rückstellung auf off nicht beachten
                            gasverbrauch-blockly-script-1.jpg

                            Vielen Dank für eeure Tipps!

                            EDIT:
                            Was haltet ihr davon
                            79efd044-4938-4c72-b417-819b99480d7e-grafik.png

                            M Offline
                            M Offline
                            Markus 7
                            wrote on last edited by
                            #25

                            @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                            Aktuell zähle ich leider doppelt da ich mit einem Blockly Script bei Änderung des Status eine Zählung mache

                            Ich habe das so gelöst, dass ich pro Impuls die Hälfte der eigentlichen Verbrauchszahl hinzuaddiere.

                            Ich greife also am Zähler (mit der Auflösung von 0,001 m3) die 2. Nachkommastelle ab (entspricht 10 L).
                            Dabei gibt es bei pro ganzer Umdrehung des Zählrades zwei Impulse. Diese addiere ich dann in Blockly mit jeweils dem Wert "0,005", sodass die zwei Impulse dann zusammen "0,01 m3" ergeben und zum bestehenden Verbrauch addiert werden.

                            fb6df906-d75f-4bfd-8dda-a31dfb59fe88-image.png

                            1 Reply Last reply
                            0
                            • MartinPM MartinP

                              @seppele Die zweite Lösung funktioniert. Übliche Lösung ist aber auch oben im Trigger statt ....

                              "wurde geändert"

                              "ist größer als voriger"

                              ... zu wählen,,,

                              S Offline
                              S Offline
                              seppele
                              wrote on last edited by
                              #26

                              Danke euch zwei!

                              @martinp Verstehe ich nicht 🙂 ich stelle ja immer zwischen ON und OFF hin und her und habe ja keinen Wert der sich erhöht oder kapiere ich die Funktion nicht?

                              @Markus-7 Ja verstehe jetzt dein vorgehen, ich glaube ich bleib aber vorerst mal bei meinem Wertvergleich gefällt mir irgendwie besser 🙂

                              MartinPM 1 Reply Last reply
                              0
                              • S seppele

                                Hallo Leute, ich bin neu hier und wollte euch um Hilfe bitte.

                                Ich möchte meinen Gaszähler einen "BK-G4 M" von Tigas auslesen und die Daten in einer InfluxDB auf einem Raspi speichern, anschliessend würde ich die Daten gerne visualisieren damit ich den Gasverbrauch anzeigen kann.

                                Ich hoffe ich bin hier im richtigen Unterforum, wusste nicht wo ich das am besten hinpacke da es eigentlich mehrere Themenschwerpunkte beinhaltet.

                                Was ich bereits gemacht habe.

                                • RPI 4 aufgesetzt
                                • iobroker installiert
                                • influxdb installiert
                                • grafana installiert
                                • esphome installiert
                                • Reed Kontakt an D1 Mini angeschlossen
                                • D1 Mini mit esp home geflasht (yaml script aus Internet)
                                • D1 Mini zeigt beim überfahren eines Magneten den Statuswechsel an
                                • Daten bei Statuswechsel werden in der influxDB gespeichert (timestamp, Status on/off)

                                Was mir noch fehlt und ich jetzt Probelme habe:

                                • Mein Script entsprechend anpassen dass die Entprellung mit dem Gaszähler zusammen passt damit richtig gezählt wird
                                • Die gespeicherten Daten im Grafana dann auswerten damit ich den Verbrauch zb. Pro Tag, Pro Woche, Pro Monat und Pro Jahr anzeigen kann

                                Hiet ein Bild von den Settings zum speichern der Daten in InfluxDB:
                                27b20a1a-1525-4bc4-b2aa-5545c59ba22d-grafik.png

                                Hier das yaml Script vom D1 (aus dem Internet, nicht meins)

                                esphome:
                                  name: d1-gas
                                  friendly_name: D1Gaszähler
                                
                                esp8266:
                                  board: esp01_1m
                                
                                # Enable logging
                                logger:
                                
                                # Enable Home Assistant API
                                api:
                                  encryption:
                                    key: "XXX"
                                
                                ota:
                                  password: "XXX"
                                
                                wifi:
                                  ssid: !secret wifi_ssid
                                  password: !secret wifi_password
                                
                                  # Enable fallback hotspot (captive portal) in case wifi connection fails
                                  ap:
                                    ssid: "D1-Gas Fallback Hotspot"
                                    password: "XXX"
                                
                                
                                
                                # MQTT 
                                mqtt:
                                  broker: 192.168.1.200
                                  username: XXX
                                  password: XXX
                                  client_id: d1gaszaehler
                                  topic_prefix: esphome
                                
                                
                                # Reed Kontakt an GPIO5
                                binary_sensor:
                                  - platform: gpio
                                    name: "Gaszaehler"
                                    id: Gaszaehler
                                    pin:
                                      number: 5
                                      inverted: true
                                      mode: INPUT_PULLUP
                                    filters:
                                      # debounce, delay um Doppelzählungen zu vermeiden
                                      - delayed_off: 1s
                                    on_press:
                                      then:
                                        - mqtt.publish:
                                            topic: esphome/Gaszaehler/Stand
                                            payload: id(Gaszaehler).state
                                

                                Im Script sieht man in Zeile 50 ein "delayed_off: 1s" ich schliesse daraus das dadurch der Statuswechsel auf 1 Sekunden beschränkt ist, ist das gut so?

                                Hat jemand ein Flow für mich das ich verwenden könnte um die Daten die ich speichere zu Visualisieren?

                                Ich danke schon mal für eure Hilfe und Inputs, vermutlich kommt da noch einiges das ich nicht bedacht habe 🙂

                                danke
                                sep

                                S Offline
                                S Offline
                                Springreiter
                                wrote on last edited by
                                #27

                                @seppele Wenn ich Dir einen Tipp geben kann- lass es mit Reed- Näherungssensor oder IR- Sensor. Habe damit echt lange rumexperimentiert- frisst echt nur Zeit und Nerven. Es wir immer wieder mal zu Fehlzählungen kommen, und dann muss du wieder von Hand eingreifen und das korrigieren. Ich hab mich schließlich für die ESP-Cam entschieden mit Watermeter. Das funktioniert echt zuverlässig seit einem Jahr.
                                Ich habe mal ein Video darüber gemacht - https://www.youtube.com/watch?v=Rtp13A-BMxA&t=77s - schau es dir einfach mal an wenn du Lust hast.

                                S 1 Reply Last reply
                                0
                                • S seppele

                                  Bevor ich das InfluxDB Problem weiter behandle muss ich noch die Falschzählungen des Reedkontakts lösen.

                                  Ich hab das Script wie gesagt aus dem Netz und hätte dazu ein paar Fragen, ich hoffe jemand kann mir dabei helfen.

                                  Wozu brauch ich folgenden Part, hab kein Homeassistant laufen, konnte das durch google nicht lösen.
                                  Kann ich das rauslöschen?

                                  # Enable Home Assistant API
                                  api:
                                    encryption:
                                      key: "2342+243532+234532="
                                  

                                  Jetzt zum eigentlichen Problem:
                                  Aktuell zähle ich leider doppelt da ich mit einem Blockly Script bei Änderung des Status eine Zählung mache, da aber die Rückstellung von on auf off auch eine Änderung ist zähle ich jede Umdrehung doppelt.
                                  Hier der Teil aus der esphome yaml der den Status erfasst:

                                  # Reed Kontakt an GPIO5
                                  binary_sensor:
                                    - platform: gpio
                                      name: "Gaszaehler"
                                      id: Gaszaehler
                                      pin:
                                        number: 5
                                        inverted: true
                                        mode: INPUT_PULLUP
                                      filters:
                                        # debounce, delay um Doppelzählungen zu vermeiden
                                        - delayed_off: 1s
                                      on_press:
                                        then:
                                          - mqtt.publish:
                                              topic: esphome/Gaszaehler/Stand
                                              payload: id(Gaszaehler).state
                                  

                                  Ich hab noch nicht rausgefunden wie ich das am einfachsten löse.
                                  Kann man in Blockly nicht sagen "wenn Wert == on > Zählen", dann würde er die Rückstellung auf off nicht beachten
                                  gasverbrauch-blockly-script-1.jpg

                                  Vielen Dank für eeure Tipps!

                                  EDIT:
                                  Was haltet ihr davon
                                  79efd044-4938-4c72-b417-819b99480d7e-grafik.png

                                  ubeckerU Online
                                  ubeckerU Online
                                  ubecker
                                  wrote on last edited by
                                  #28

                                  @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                                  Bevor ich das InfluxDB Problem weiter behandle muss ich noch die Falschzählungen des Reedkontakts lösen.

                                  wie alle (oder fast alle) ist das Prellen des Reedkontakt problematisch. Ich hab da auch lange rum probiert. Letztendlich hab ich dann den Reedkontakt hardwareseitig mit einem retriggerbaren Monoflop ausgestattet. Dann war Ruhe. läuft jetzt ohne Falschimpulse seit einem Jahr.

                                  Gruß Udo

                                  S M 3 Replies Last reply
                                  0
                                  • ubeckerU ubecker

                                    @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                                    Bevor ich das InfluxDB Problem weiter behandle muss ich noch die Falschzählungen des Reedkontakts lösen.

                                    wie alle (oder fast alle) ist das Prellen des Reedkontakt problematisch. Ich hab da auch lange rum probiert. Letztendlich hab ich dann den Reedkontakt hardwareseitig mit einem retriggerbaren Monoflop ausgestattet. Dann war Ruhe. läuft jetzt ohne Falschimpulse seit einem Jahr.

                                    S Offline
                                    S Offline
                                    seppele
                                    wrote on last edited by
                                    #29

                                    So hab wieder getüftelt, leider hat meine Variante vom Blockly-Script nicht funktioniert, warum weis ich nicht, hab dann auf die variante von @Markus-7 zurück geändert und zähle jetzt mit 0,005 aber dafür On und Off damit ergibt sich dann wieder bei einem Durchgang 0,01

                                    Jetzt wird wieder fleißig gezählt, heute morgen war aber leider der Status auf ON also hat das D1 nichtmehr zurückgestellt auf OFF und somit fehlt mit jetzt eine Zählung.
                                    Wie muss ich mir denn das vorstellen mit dem Reedkontakt, der Magnet am Zählerrad dreht sich am Kontakt vorbei und schliesst den Schalter, erkennt der beim drehen den Anfangszeitpunkt wo der Schalter schliesst und den Endzeitpunkt wo der Schalter wieder öffnet?
                                    Oder erkennt der nur einen Impuls beim schliessend und öffnet dann wenn der Magnet wieder außer Reichweite ist ohne einen Impuls und das Script sagt nach 1 Sekunde wieder zurückstellen auf OFF?

                                    Der erste Impuls wurde nämlich immer sauber übertragen, somit würde die Zählung stimmen wenn meine Variante vom Blockly Script funktioniert hätte,

                                    @Springreiter Danke für die Info, aktuell macht mir das noch Spass das rumtüfteln, aber wenn das auf Dauer nicht sauber läuft dann muss ich mir was anderes Überlegen. Ich hab jedenfalls ein übriges ESP-Cam da liegen, daran scheiterst jedenfalls nicht 🙂
                                    Schau mir dein Video aber heute Abend an.

                                    @ubecker Muss ich erst mal googeln was ein Monoflop ist 🙂 aber danke für den Hinweis.

                                    Jetzt zu InfluxDB:
                                    Das Problem hab ich gelöst.
                                    Hab einfach die 1.6.7 deinstalliert und eine 2.7 installiert, im Adapter habe ich nur auf v2 umstellen und das API Token eingeben müssen.
                                    Leider hab ich meine bisherigen Daten verloren, hab zwar ein backup gemacht aber vermutlich passen die Strukturen nichtmehr mit der neuen Datenbank zusammen.
                                    Mal sehen ob ich mir das antu und die Daten versuche zu importieren.

                                    Grafana:
                                    Auch da hab ich ein Update von 9.x auf 10.x gemacht, jetzt bin ich überall wieder sauber.
                                    Musste auch hier die Datenquell neu anlegen und das Token eingeben aber dann hat alles sofort funktioniert.
                                    Hab auch schon ein paar Flux Querys gebastelt und dadurch schon Auswertungen gemacht.
                                    Der Data Explorer von Influxdb2 ist sehr cool und Hilft mir sehr, auch gibts da ja sogar ein Dahsboard zum auswerten, wie Grafana für kleine Auswertungen.

                                    Es bleibt spannend durch eure Hilfe, mal sehen ob wir das hinbekommen mit dem Zählen. 🙂

                                    Marc BergM 1 Reply Last reply
                                    0
                                    • S seppele

                                      Danke euch zwei!

                                      @martinp Verstehe ich nicht 🙂 ich stelle ja immer zwischen ON und OFF hin und her und habe ja keinen Wert der sich erhöht oder kapiere ich die Funktion nicht?

                                      @Markus-7 Ja verstehe jetzt dein vorgehen, ich glaube ich bleib aber vorerst mal bei meinem Wertvergleich gefällt mir irgendwie besser 🙂

                                      MartinPM Online
                                      MartinPM Online
                                      MartinP
                                      wrote on last edited by
                                      #30

                                      @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                                      Verstehe ich nicht ich stelle ja immer zwischen ON und OFF hin und her und habe ja keinen Wert der sich erhöht oder kapiere ich die Funktion nicht?

                                      Es werden in Programmiersprachen für möglichst viele Datentypen Sortier-Kriterien festgelegt...

                                      Und bei Logikwerten ist true größer als false. Also wird bei "ist größer ..." der Übergang false->true ausgewertet, aber true -> false nicht ...

                                      Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                                      Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.13)
                                      kernel Linux pve 6.8.12-15-pve
                                      6 GByte RAM für den Container
                                      Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                                      Remote-Access über Wireguard der Fritzbox

                                      S 1 Reply Last reply
                                      0
                                      • MartinPM MartinP

                                        @seppele said in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                                        Verstehe ich nicht ich stelle ja immer zwischen ON und OFF hin und her und habe ja keinen Wert der sich erhöht oder kapiere ich die Funktion nicht?

                                        Es werden in Programmiersprachen für möglichst viele Datentypen Sortier-Kriterien festgelegt...

                                        Und bei Logikwerten ist true größer als false. Also wird bei "ist größer ..." der Übergang false->true ausgewertet, aber true -> false nicht ...

                                        S Offline
                                        S Offline
                                        seppele
                                        wrote on last edited by
                                        #31

                                        @martinp Danke martin, ich verstehe was du meinst, aber mein Status ist ja ON und OFF, das sind doch String Werte oder?
                                        Kann ich den Wert On/OFF auf einen boolean prüfen?

                                        Wenn du sagst dass das geht dann probiere ich das heute Abend aus, dann müsste ich im Blockly aber prüfen auf Wahr oder?

                                        MartinPM 1 Reply Last reply
                                        0
                                        • Marc BergM Offline
                                          Marc BergM Offline
                                          Marc Berg
                                          Most Active
                                          wrote on last edited by
                                          #32

                                          @seppele sagte in Hilfe bei Gaszähler > Reed > InfluxDB > Grafana:

                                          Jetzt wird wieder fleißig gezählt, heute morgen war aber leider der Status auf ON also hat das D1 nichtmehr zurückgestellt auf OFF und somit fehlt mit jetzt eine Zählung.
                                          Wie muss ich mir denn das vorstellen mit dem Reedkontakt, der Magnet am Zählerrad dreht sich am Kontakt vorbei und schliesst den Schalter, erkennt der beim drehen den Anfangszeitpunkt wo der Schalter schliesst und den Endzeitpunkt wo der Schalter wieder öffnet?
                                          Oder erkennt der nur einen Impuls beim schliessend und öffnet dann wenn der Magnet wieder außer Reichweite ist ohne einen Impuls und das Script sagt nach 1 Sekunde wieder zurückstellen auf OFF?

                                          Es ist noch ein wenig anders. Ja, der Magnet dreht sich am Reed-Kontakt vorbei. Solange der Magnet vor dem Reed-Kontakt steht, wird "ON" gesendet, ansonsten "OFF". Wenn nun der Gasbezug zufälliger Weise endet, während der Magnet vor dem Reed-Kontakt steht, bleibt der Status auf "ON". Ganz normal, aber kein Problem, dadurch geht ja kein Wert verloren.

                                          NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

                                          Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

                                          Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

                                          S 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          616

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe