UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[DISKUSSION] Gaszähler PIPERSBERG G4 RF1 mit TWS auslesen

Eure Wünsche und Phantasien
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Ersteller
Sensej
Reactions:
Beiträge: 901
Registriert: So Aug 12, 2018 9:12 am
Hat sich bedankt: 112 Mal
Danksagung erhalten: 240 Mal

#11

Beitrag von Sensej »

Hallo Göran,
gbglace hat geschrieben: So Nov 07, 2021 11:16 pm Die Visu in Grafana kommt mit dem reinen Zählerstand schon klar, da kann man im SQL sich ja auch wieder was in m³ oder kW/h umrechnen
Wie übernehme ich meinen alten Gas- Zählerstand?
Einfach ablesen, in Impulse umrechnen und bei der GA(11/1/1), die dafür zuständig ist, setzen?
gbglace hat geschrieben: So Nov 07, 2021 11:16 pm Allerdings ist das Buslog etwas eigenartig wenn da im Sekundenbereich so viele Telegramme kommen, da passt was nicht.
Da habe ich mit einem Magneten getestet :)

Welchen Datentyp muss ich nehmen damit ich statt
Z.B 00000009 = 9 m3 -> 000000091 = 9.1 m3 angezeigt bekomme? Geht es überhaupt?
Der Zähler selber gibt einen Impuls = 0.1 m3

MfG Juri
TWS 2400 ID: 69 + PBM ID: 728 + TP-UART, VPN offen, Reboot erlaubt

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#12

Beitrag von Robosoc »

Sensej hat geschrieben: So Nov 07, 2021 8:13 pm 1: ich will mit dem Reedkontakt den Gasverbrauch erfassen und in Timeserie schreiben.
Ich nutze für einige Zähler einen recht einfachen ABB-KNX-Eingang. Den Rest mache ich mit folgender Logik, die Deine Aufgabe 1 übernimmt und z.B. auch das Vorgeben des aktuellen Zählerstandes ermöglicht: Die Logik macht aus einem schöden Integer-Zähler einen korrigierten Zählerwert .

Als Eingang verschließt Du lediglich Deinen Zähler und die anderen Eingänge stellst Du auf Parameter. Siehe Screenshot. Der Ausgang geht auf eine Zeitserie, die Du damit quasi anlegst. Bei mir steht der Ausgang ebenso auf C was eine recht hohe Anzahl an Werten in der Zeitserien zum Ergebnis hat....das hat mich bisher nciht gestört und ich wollte es so, weil ich anhand des Gasverbrauchs gerne Rückschlüsse auf die Modulation der Gastherme ziehen wollte...so in der Theorie, in der Praxis habe ich mit dem Letzteren noch nicht begonnen :lol:

Du kannst aber optional einen Triggereingang setzen und den Ausgang dann auf Verhalten T stellen.
Ich empfehle für diese Logik unbedingt Persistenz zu aktivieren!
Der Zähler zählt immer weiter nach oben und übernimmt im Fall, dass der eingehende Zählerwert kleiner ist als der zuvor, automatisch den letzten Ausgangswert der Logik als Startwert (3ter Eingang). Das ist für die Fälle wichtig, wenn Dein KNX-Zähler bei einer Neuprogrammierung den Wert verliert oder wenn der KNX-Zählerbereich beschränkt ist und er irgendwann bei 0 anfängt...

Ein Neuprogrammieren meines KNX-Gerätes kannst Du quasi im Screenshot unten erkannen. Die Logik hatte ich vor vielen Monaten mit einem Startwert von 1761,34 angelegt....vor ein paar Tagen habe ich den BAU-Schlüssel in meinem ETS-Projekt angelegt und dann alle Geräte einmal beschrieben um den Bau-Schlüssel auf die Geräte zu schreiben, die das untestützen. Dabei haben sich die ABB-Zähler auf 0 gestellt...mein Logikmodul hat dann intern den Startwert 2162,55 für die dritte Eingangsvariable übernommen. seit dem wurden im Haus scheinbar 3,52 m3 Wasser verbraucht.

Code: Alles auswählen

/**
* Zählerlogik mit Nulldurchgangserkennung und Wertvorgabe
*
* Nutzungsrechte:
* Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
*/
{
  "Input":[
    ["ext. Zähler","Wert des externen Impuls-Zählers","$CountExt","c"],
    ["Teiler","Teiler zum Herstellen des korrekten Zählerwertes. Beispiel: Wenn ein Impuls = 0,01 Zählerwerte sind, dann ist der Teiler 100","$Teiler","u"],
    ["Startwert","Startwert für den Zähler","$CountInit","c"]
  ],
  "Output":[
    ["Zählerwert","Wert des Zählers","$Value","c"]
  ],
  "Level":[
    ["$CountExt", "integer", 0],
    ["$CountInit", "float", 0.0],
    ["$lastCountExt", "integer", 0],
    ["$Reset", "bool", false],
    ["$Value", "float", 0.0],
    ["$ValueAdder", "float", 0.0],
    ["$constTrue", "bool", true],
    ["$const1", "integer", 1],
    ["$Teiler", "integer", 100]
  ],
  "Module":[
    ["Comparator" , "$lastCountExt" , "$Reset" , "$CountExt"], 
    ["Latch","$Value","$CountInit","$Reset",0],
    ["Latch","$CountExt","$lastCountExt","$constTrue",0],
    ["Ratio","$CountExt","$ValueAdder", "$Teiler"],
    ["Polynomial", "$const1", "$Value",["$CountInit", "$ValueAdder"]]
  ]
}
Bild
Zuletzt geändert von Robosoc am Mo Nov 08, 2021 8:28 am, insgesamt 4-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#13

Beitrag von Robosoc »

Sensej hat geschrieben: So Nov 07, 2021 8:13 pm 2: In Grafana auswerten: z.B. für einen best. Zeitraum den täglichen/stündlichen Verbrauch ermitteln.
Würde ich wie Göran auch ausschließlich in Grafana lösen, diese Diskussion meinte Göran glaube ich:
viewtopic.php?f=26&t=2975

Auch interessant für Dich:
viewtopic.php?p=29562#p29562
viewtopic.php?f=26&t=2379

Sensej hat geschrieben: So Nov 07, 2021 8:13 pm 3: In Comet Visu den Zählerstand gesamt, heute und gestern im m3 und KWh darstellen.
Lege Dir jeweils ein MQTT- oder KNX GA-Objekt an (da Deine Visu aktuell wahrscheinlich eher mit KN-GA's arbeitet, macht eine GA wohl eher Sinn) , lege fest, zu welchen Zeitpunkten Du denn die letzten Werte "eingefrohren" haben willst (00:00, oder 12:00 Uhr...) und erstelle Dir beispielsweise eine AND-Standardlogik je Wert, mit einem U-Eingang, der den vorherigen Wert hält, zusätzlich einen Trigger-Eingang mit der Zeit und einen T-Ausgang.

Dann sinnvolle Tags und Namen für die Logiken vergeben, fertig.
Zuletzt geändert von Robosoc am Mo Aug 01, 2022 7:08 pm, insgesamt 3-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#14

Beitrag von Robosoc »

Juri, ich habe meinen letzten Beitrag noch um ein paar Links ergänzt, weiß nicht ob Du das noch sehen würdest, durch Deine Danksagung weiß ich ja, dass Du es schon gelesen hattest.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Sensej
Reactions:
Beiträge: 901
Registriert: So Aug 12, 2018 9:12 am
Hat sich bedankt: 112 Mal
Danksagung erhalten: 240 Mal

#15

Beitrag von Sensej »

Robosoc hat geschrieben: Mo Nov 08, 2021 8:19 am
Als Eingang verschließt Du lediglich Deinen Zähler und die anderen Eingänge stellst Du auf Parameter. Siehe Screenshot. Der Ausgang geht auf eine Zeitserie, die Du damit quasi anlegst....

Du kannst aber optional einen Triggereingang setzen und den Ausgang dann auf Verhalten T stellen.
Ich empfehle für diese Logik unbedingt Persistenz zu aktivieren!
Hi Sven,
Vielen Dank.

MfG Juri
TWS 2400 ID: 69 + PBM ID: 728 + TP-UART, VPN offen, Reboot erlaubt

Ersteller
Sensej
Reactions:
Beiträge: 901
Registriert: So Aug 12, 2018 9:12 am
Hat sich bedankt: 112 Mal
Danksagung erhalten: 240 Mal

#16

Beitrag von Sensej »

Robosoc hat geschrieben: Mo Nov 08, 2021 8:19 am Die Logik hatte ich vor vielen Monaten mit einem Startwert von 1761,34 angelegt...

Hi Sven, habe heute die Logik von dir ausprobiert und habe paar Fragen.

Bei mir wird unter Startwert im grünen Kästchen kein Wert angezeigt.
1. Wann wird dieser Wert( bei dir 1761,36) normalerweise angezeigt?

2. Wenn ich die Logik ändere und speichere, dann wird auch Gesamtzählerwert resetet.
Liegt es daran, dass ich noch keine Timeserie verwende?


Meine Objekte:
Gas-Zaehlerstand-Gesamt: K-581 -> 14.076
Gas-Zaehlerstand-Aktuell: K-582 -> 14.076
Gas-Zaehlerstand-Startwert: K-585 -> 14.076

Den Teiler habe ich aus Input gelöscht und in der Logik auf 1 gesetzt, weil der aktueller Wert bei mir in m3 ankommt.

Inhalt der Logik

Code: Alles auswählen

{
  "Input":[
    ["ext. Zähler","Wert des externen Impuls-Zählers","$CountExt","c"],
    ["Startwert","Startwert für den Zähler","$CountInit","c"]
  ],
  "Output":[
    ["Zählerwert","Wert des Zählers","$Value","c"]
  ],
  "Level":[
    ["$CountExt", "float", 0.0],
    ["$CountInit", "float", 0.0],
    ["$lastCountExt", "float", 0.0],
    ["$Reset", "bool", false],
    ["$Value", "float", 0.0],
    ["$ValueAdder", "float", 0.0],
    ["$constTrue", "bool", true],
    ["$const1", "integer", 1],
    ["$Teiler", "integer", 1]
  ],
  "Module":[
    ["Comparator" , "$lastCountExt" , "$Reset" , "$CountExt"], 
    ["Latch","$Value","$CountInit","$Reset",0],
    ["Latch","$CountExt","$lastCountExt","$constTrue",0],
    ["Ratio","$CountExt","$ValueAdder", "$Teiler"],
    ["Polynomial", "$const1", "$Value",["$CountInit", "$ValueAdder"]]
  ]
}
test.jpg

MfG Juri
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
TWS 2400 ID: 69 + PBM ID: 728 + TP-UART, VPN offen, Reboot erlaubt

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#17

Beitrag von Robosoc »

Für alle die Mitlesen und noch nicht so viel Erfahrung oder gar noch Vorbehalte gegen den Logikeditor haben: Im Folgenden spreche ich Dinge an, die ich an dem Logikeditorkonzept vom TWS extrem schätze, die ich so auch noch nicht gesehen habe und die ihn meiner Meinung nach wirklich hocheffizient und sinnvoll für KNX, 1-Wire, MQTT machen - es ist quasi eine Art Plädoye wegen der eingebauten Eingangsfunktionen, der Startverhalten, dem Doktormodus und der Persistenzmöglichkeit :-) :D
Sensej hat geschrieben: Mo Nov 08, 2021 10:19 pm 2. Wenn ich die Logik ändere und speichere, dann wird auch Gesamtzählerwert resetet.
Liegt es daran, dass ich noch keine Timeserie verwende?
Nein, das liegt daran, dass Du den Startwert als GA übergibst und nicht wie ich als Festparameter. ABER: Wenn Du es so machsst wie ich, könntest Du bei einem erneuten Speichern nach langer Zeit einmal unbeabsichtigt die Funktion der Nulldurchgangerkennung rückgängig machen, wenn Du Dir den aktuellen Startwert nicht, wie in meinem Screenshot zu sehen, im Doktormodus anzeigen lassen und notiert hast. Da muss man die Logik noch sicherer gegen eigene Fehler machen, ist mir jetzt erst bewusst geworden. Du wirst es am Ende des folgenden Textes nachvollziehen können - hoffentlich bekomme ich es einigermaßen erklärt.
Sensej hat geschrieben: Mo Nov 08, 2021 10:19 pm Bei mir wird unter Startwert im grünen Kästchen kein Wert angezeigt.
1. Wann wird dieser Wert( bei dir 1761,36) normalerweise angezeigt?
Das ist so, wie Du die Eingänge nutzt völlig korrekt, dass in dem grünen Kästchen kein Wert steht. Das ist das Kästchen für die Eingangsfunktionen, von denen Du jetzt keine nutzt. Ich habe in meinem Modul kein Eingangsobjekt auf dem zweiten und dritten Eingang verschaltet, sondern die Eingangsfunktion ("grünes Kästchen") auf Parameter gestellt und somit diesem Eingang einen "zunächst" festen Variablenwert von 1761.36 übergeben. Das mache ich deshalb, weil ich keine GA oder so für diesen Startwert habe, was meiner Meinung nach in diesem Fall auch nur sehr bedingt Sinn macht. Dazu komme ich gleich.

Klicke einfach mal auf dieses grüne Kästchen und spiele mit den Möglichkeiten rum, dann wirst Du sehen, was da geht und was ich meine. Auf diese Weise hätte ich an Deiner Stelle auch die 1 am zweiten Eingang vorgegeben, anstelle den Code zu verändert. Das ist zwar an sich nicht falsch und Du kannst es auch so lassen, aber wenn Du den Code selber irgendwann noch einmal für andere Verbrauchszähler verwenden willst und Du die Korrektur da dann brauchst (so ist es bei mir, bei drei von vier Zählern brauche ich ihn), dann ist er schon da und Du würdest Deine bestehende Logik einfach nur duplizieren (einer der Butten nebem dem Speichern.

Den Startwert mittels GA zu übergeben führt zu folgenden Herausforderungen (versuche den folgenden Absätze möglichst genau nachzuvollziehen):

Der Eingang einer Logik kennt den letzten Wert des verknüpften Objektes nur, wenn dieser zur Laufzeit der Logik auch mindestens 1x empfangen wurde , also nach dem letzten Speichern der Logik oder nach einem Aktivschalten einer inaktiven Logik -> und dafür muss Wert dieser aktiv bereitsgestellt werden egal um was für einen Typen es sich handelt (1-Wire, KNX, MQTT, Objekt eienr anderen Logik)! Es reicht nicht aus, dass Dein TWS z.B. im Objektmonitor den letzten Wert dieses Objektes kennt und anzeigt, denn deshalb liegt der Wert am Eingang der Logik noch lange nicht an. Das ist auch total sinnvoll so!!!

Wenn Du nach dem Speichern einer Logik die Logik auf Doktormodus stellst, siehst Du, dass die Eingänge meist 0 oder false sind, aber z.B. nicht rötlich hinterlegt. Das sind Defaultwerte, die aber nicht wirklich an die Logik übergeben wurden!!! Würde die Logik triggern, arbeitet diese Logik aber damit (es sei denn die internen Defaultwerte aus dem Logikcode sind anders definiert, die werden aber dann im Doktormodus erst nach dem ersten Triggern angezeigt).

In Deinem konkreten Fall für dieses Zähler Modul bedeutet dies, dass der Startwert vor einem ersten Triggern der Logik gesetzt sein sollte, sonst schreibst Du am Ende "Müll" in die Zeitserie. Wenn Du also den Startwert unbedingt per GA übergeben willst, dann sollte dieser Eingang auf keinen Fall mit dem Trigger-Verhalten C = on change, A = always angelegt sein, sondern mit U = update only no trigger! Damit vermeidest Du, dass die Logik nur beim initialen Setzen des Startwertes triggert, was dann zu falschen Werten in der Zeitserie führen würde, wenn der Zählereingang noch nicht aktiv beschrieben wurde und der KNX-Zähler aber nicht mehr 0 ist... (dies zu vestehen ist wichtig für gute Logiken!!!). Zusätzlich solltest Du den Startwerteingang unbedingt von X auf I stellen, dass führt dazu, dass die Logik nur ausgeführt (getriggert) werden kann, wenn auf dem Eingang mindestens ein erster Wert empfangen wurde. Eine Kombination aus U und I auf dem selben Eingang ist somit sehr mächtig. Die Logik wird das erste Mal ausgeführt, wenn dieser Eingang einen Wert hat und ein anderer Eingang (oder Timer) die Logik triggert.

Warum Nulldurchgangserkennung und Persistenz (Unendlichkeitszeichen im Logikkopf)
In meiner Custom-Logik habe ich ja eine "Nulldurchgangserkennung" für den ersten Eingang umgesetzt. Wie oben beschrieben ist das dann hilfreich, wenn z.B. der vorgeschaltete KNX-Zähler seinen bereits erreicheten Zählerwert durch Stromausfall oder Zurücksetzen (Neuprogrammieren) verliert. Dies kann ja passieren ohne das man dann gleich an die Logik dahinter denkt. Erkennt die Logik nun, dass der Werk am Eingang kleiner ist als der zuletzt Empfangene, dann wird der Startwert (dritter Eingangsparameter) auf den letzten Wert des Logikausgangs (Zählerwertausgang) gesetzt und deckt sich ab diesem Moment nicht mehr mit dem ursprünglich vorgegebenen Startwert. Das sieht man dann bei mir im Doktormodus-Screenshot. Durch den Persistenzmodus wird nun dieser neue Wert erhalten, selbst wenn die Logik z.B. nach einem Update oder bei Stromausfall des Servers neu initialisiert. So läuft das bei mir sicher über ein Jahr auch nach Updates und Umbau im Verteilerkasten (also gewolltes Abschalten des TWS).

Der HAKEN in meiner Logik - neues Speichern oder Aktivieren

Was ich nicht umgesetzt habe ist der Fall, dass ich die Logik mal ändere (z.B. weil ich ein weitere Ausgangsobjekt hinzufüge) und deshlab neu Speicher. In dem Fall setzen sich auch alle internen Werte zurück, da hilft dann auch persistenz nichts. Und genau an dieser Stelle wäre dann vermutlich folgendes Konzept besser, aber noch nicht umgesetzt:

Der Startwert, der sich bei Nulldurchgang anpasst, sollte wohl auf einen zweiten Logik-Ausgang ausgeführt werden und von da in eine Zeitreihe geschrieben werden. Den Startwert-Eingang sollte man dann wirklich mit Verhalten U und vor allem aber I und nicht als Festparameter wie bei mir übergeben. Nur so kann man das ungewollte Triggern nach einem Speichern durch eben das I verhinden. Diesen Eingang muss man ja nicht mit einem Objekt verschalten, sondern ich würde nach einem erneuten Speichern lediglich den Wert aus der Zeitreihe im Doktormodus als Startwert eintragen...das wäre vermutlich der Konigsweg.
Zuletzt geändert von Robosoc am Di Nov 09, 2021 9:05 am, insgesamt 2-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

Ersteller
Sensej
Reactions:
Beiträge: 901
Registriert: So Aug 12, 2018 9:12 am
Hat sich bedankt: 112 Mal
Danksagung erhalten: 240 Mal

#18

Beitrag von Sensej »

Hi Sven(@Robosoc ),

Vielen Dank für so eine detaillierte Beschreibung/Erklärung und zahlreiche Tipps.
Ich mache zuerst genau so wie bei dir und dann, wenn ich Zeit haben werden, werde ich den Funktionsumfang erweitern.

Beim Testen ist mir noch folgendes aufgefallen, kann man aber ignorieren.
Wenn der Wert des ext. Zählers direkt in der Logik auf 0 geändert wird, dann kriegt man die falschen Zählerwerte.

Welchen DPT hast du für die GA "Zählerwert-Gesamt" genommen?

MfG Juri
TWS 2400 ID: 69 + PBM ID: 728 + TP-UART, VPN offen, Reboot erlaubt

Robosoc
Reactions:
Beiträge: 1876
Registriert: Di Okt 09, 2018 9:26 am
Hat sich bedankt: 635 Mal
Danksagung erhalten: 775 Mal

#19

Beitrag von Robosoc »

Sensej hat geschrieben: Di Nov 09, 2021 5:37 pm Wenn der Wert des ext. Zählers direkt in der Logik auf 0 geändert wird, dann kriegt man die falschen Zählerwerte.
Habe ich noch nicht verstanden, meinst Du im Doktormodus? Wenn ja...warum sollte man das tun, wenn der prduktiv läuft??? Dann würde man ja einen unbeabsichtigten Nulldurchgang erzwingen, den es garnicht gab.
Sensej hat geschrieben: Di Nov 09, 2021 5:37 pm Welchen DPT hast du für die GA "Zählerwert-Gesamt" genommen?
Keinen...Ich schreibe direkt in eine Zeitserie ohne GA dazwischen. Die Zeitserie ist dann auch nur ein einheitenloser Zahlenwert, was mich nicht weiter stört.
Aber ich denke ich wäre wohl mit einem 14er DPT gegangen, z.B. 14.076 Volumen (m3) scheint sich für einen Gaszähler anzubieten, oder? :think:
Zuletzt geändert von Robosoc am Di Nov 09, 2021 6:04 pm, insgesamt 1-mal geändert.
VG, Sven - TWS 950Q ID:335 & 291, VPN offen, Reboot OK

eib-eg
Reactions:
Beiträge: 442
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1457 Mal
Danksagung erhalten: 235 Mal

#20

Beitrag von eib-eg »

app.php/kb/viewarticle?a=27

müsste ich mal überarbeiten
TW 2600_99 seit 1.1.2018 / VPN zu
Antworten

Zurück zu „Feature Requests & Diskussionen Timberwolf Allgemein“