Release Candidate 1 zur V 4.5 veröffentlicht

Verehrte Insider, es wäre toll, wenn Ihr diese Version zeitnah installieren und testen könntet, da wir die Hauptversion 4.5 bei guten Rückmeldungen noch diese Woche veröffentlichen wollen. Danke Euch.

Release Notes: https://elabnet.atlassian.net/wiki/x/AQBIyQ

Zähler-Logik (z.B. für Regenmessung)

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
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
Antworten

Ersteller
danik
Beiträge: 415
Registriert: Mo Sep 10, 2018 8:40 pm
Hat sich bedankt: 298 Mal
Danksagung erhalten: 278 Mal

Zähler-Logik (z.B. für Regenmessung)

#1

Beitrag von danik »

Hi

Ich habe einen Regensensor, welcher an einem Binäreingang hängt. Der Eingang ist als Zähler konfiguriert, zählt also bei jedem Impulseingang um eins hoch. Wenn das KNX-Device neu programmiert wird, fängt der Zähler aber wieder bei Null an, was natürlich dann in den Grafana-Auswertungen überhaupt nicht mehr passt (da ich dort mit der tollen Differenz-Funktion die Regenmenge ermittle). Und da ich ein 12fach KNX-Gerät habe kann es eben schon mal vorkommen, dass das Device neu programmiert werden muss.

Die Logik hier macht folgendes:

- Der Zählerwert kann mit einem beliebigen Faktor umgerechnet (bei mir z.B. 0.518 pro Impulseingang)
- Wenn der Zählerstand zurückgesetzt wird und wieder von 0 beginnt, so wird der Gesamtwert dennoch richtig weitergerechnet
- Initiale Werte können ggf. als Parameter im Code übergeben werden

WICHTIG: Logik Persistent aktivieren ist wichtig, damit die Zählerstände auch einen Reset überlegen.

Bild
Logik.png

Allfällige Codeoptimierungen sind willkommen.

Code: Alles auswählen

/**=====================================================================
Logik zur Verarbeitung von Zählerwerten, z.B. einem Regensensor.
Der Zählerwert kann mit einem Faktor umgerechnet werden. Bei
Rest des Zählerstandes (z.B. durch Programmierung des KNX-Gerätes) 
zählt der Gesamtwert korrekt weiter.
Initiale Werte (Zählerstand, Gesamtwert) können übergeben werden 
direkt im Code
======================================================================*/ 

{
    "Level":[
        // in diese beiden Variablen hier können ggf. initiale Werte
        // übergeben werden
        ["$Z_gesamt","float",0.0],
        ["$Z_alt","float",0.0],
        // ab hier keine Anpassung mehr
        ["$Z_neu","float",0.0],
        ["$Z_delta","float",0.0],
        ["$Z_offset","float",0.0],
        ["$Konst_X","float",1.0],
        ["$Min","float",0.0],
        ["$Val_ok","bool",false],
        ["$Trigger","bool",false],
        ["$Out_val","float",0.0],
        ["$Out_temp","float",0.0],
        ["$Faktor","float",1.0]
    ],
    "Module":[
        // Prüfen ob Zähler neu <= Zöhler alt ist
        ["Limiter","$Z_neu","$Out_val","$Val_ok",["$Min", "$Z_alt"]],
        // Delta zwischen Zähler alt und Zähler neu
        ["Polynomial", "$Konst_X", "$Z_delta",["-$Z_alt", "$Z_neu"]],
        //Auswahl des Wertes für Offset. Entweder Delta oder neuer Wert (i.d.R. 0)
        ["Multiplexer",["$Z_delta","$Z_neu"],"$Z_offset","$Val_ok"],
        // Zähler Offset zu gesamt addieren
        ["Polynomial", "$Faktor", "$Z_gesamt",["$Z_gesamt", "$Z_offset"]],
        // Trigger zum alten Werte überschreiben
        ["Limiter","$Z_offset","$Out_temp","-$Trigger",["$Min", "$Min"]],
        // Zähler alt korrekt setzen
        ["Latch","$Z_neu","$Z_alt","$Trigger",0]
    ],
    "Input":[
        ["Zählerstand","Eingang Zählerstand","$Z_neu","c"],
        ["Faktor","Faktor für Umrechnung Gesamtzähler","$Faktor","c"]
    ],
    "Output":[
        ["Gesamtwert","Ausgang Gesamtwert","$Z_gesamt","c"],
        ["Zähler-Reset","Zähler zurückgesetzt","$Val_ok","c"]
    ]
}

/**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. */
Als Regenzähler verwende ich dieses Gerät hier
Regensensor.png
zu finden z.B. mit dem Suchbegriff "Misol WH-SP-RG"

Gruss
Dani
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
TW 3500L (#882) + TW 950Q (#321, im Moment inaktiv), VPN offen, Reboot nach Rücksprache

StefanW
Elaborated Networks
Elaborated Networks
Beiträge: 10861
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 5353 Mal
Danksagung erhalten: 9016 Mal
Kontaktdaten:

#2

Beitrag von StefanW »

Wow Dani,

sehr schön!. Tolle Anleitung!

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

Ersteller
danik
Beiträge: 415
Registriert: Mo Sep 10, 2018 8:40 pm
Hat sich bedankt: 298 Mal
Danksagung erhalten: 278 Mal

#3

Beitrag von danik »

Inspiriert durch den Zählerbaustein von Robert (vielen dank für die Code-Inspiration, ohne hätte ich das ganze nie hinbekommen) habe ich die Logik noch etwas ergänzt.

- neu gibt es einen zusätzlichen Ausgang, der nur nach einem definierten Intervall sendet.

Bei mir sinnvoll, um bei der Rasenbewässerung die Telegramme für die Langzeitarchivierung zu reduzieren.

Bildschirmfoto 2020-04-13 um 08.58.57.png

Code: Alles auswählen

/**
 * Version 2 vom 12.4.2020
 */
 
/**=====================================================================
Logik zur Verarbeitung von Zählerwerten, z.B. einem Regensensor.
Der Zählerwert kann mit einem Faktor umgerechnet werden. Bei
Rest des Zählerstandes (z.B. durch Programmierung des KNX-Gerätes) 
zählt der Gesamtwert korrekt weiter.
Initiale Werte (Zählerstand, Gesamtwert) können direkt im Code 
übergeben werden.

======================================================================*/ 

{
    "Level":[
        // in diese beiden Variablen hier können ggf. initiale Werte
        // übergeben werden
        ["$ZaehlerGesamt","float",0.0],
        ["$InAlt","float",0.0],
        // ab hier keine Anpassung mehr
        ["$InNeu","float",0.0],
        ["$Delta","float",0.0],
        ["$Delta1","float",0.0],
        ["$ZaehlerGesamtNeu","float",0.0],
        ["$ZaehlerGesamt1","float",0.0],
        ["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$KonstTrue","bool",true],
        ["$Neu","bool",false],
        ["$Neu1","bool",false],
        ["$NeuInit","bool",false],
        ["$NeuIsInit","bool",false],
        ["$Faktor","float",1.0],
        ["$Interval","float",15.0]
    ],
    "Module":[
        // Delta berechnen
        ["Polynomial", "$Konst1", "$Delta",["-$InAlt", "$InNeu"]],
        // Prüfen ob neuer Input
        ["Limiter","$Delta",0,"-$Neu",["$Konst0", "$Konst0"]],

        // prüfen ob Wert "neu" kleiner Wert "alt" ist, dann neu Initialisiert
        ["Comparator" , "$InNeu" , "-$NeuIsInit" , "$InAlt"],
        // Neuer Wert und Init --> 
        ["And" , ["$NeuIsInit" , "$Neu"], "$NeuInit"],
        
        // bei NeuInit den Zählerstand als Delta nehmen, sonst das errechnete Delta aus alt und neu
        ["Multiplexer",["$Delta","$InNeu"],"$Delta1","$NeuInit"],

        // Addieren
        ["Polynomial", "$Faktor", "$ZaehlerGesamtNeu",["$ZaehlerGesamt", "$Delta1"]],     
        // Auswahl des Wertes
        ["Multiplexer",["$ZaehlerGesamt","$ZaehlerGesamtNeu"],"$ZaehlerGesamt","$Neu"],
        // Wert In --> in Wert alt speichern
        ["Polynomial", "$Konst1", "$InAlt",["$InNeu"]], 
        // Time für Ausgabe (min. Interval)
        ["Monoflop","$Neu","-$KonstTrue","$Neu1","$Interval",0],
        // korrekten Wert auf Ausgang schrebein
        ["Multiplexer",["$ZaehlerGesamt","$ZaehlerGesamt1"],"$ZaehlerGesamt1","$Neu1"]
     ],
    "Input":[
        ["Zählerstand","Eingang Zählerstand","$InNeu","c"],
        ["Faktor","Faktor für Umrechnung Gesamtzähler","$Faktor","c"],
        ["Interval","Interval für Ausgabe in Sekunden","$Interval","c"]
    ],
    "Output":[
        ["Gesamtwert","Ausgang Gesamtwert bei jeder Änderung","$ZaehlerGesamt","c"],
        ["Gesamtwert_i","Ausgang Gesamtwert nach Interval","$ZaehlerGesamt1","c"],
        ["Zöhler init","Zähler neu initialisiert","$NeuInit","c"]
    ]
}

/**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. */

Gruss
Dani
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von danik am Mo Apr 13, 2020 9:04 am, insgesamt 1-mal geändert.
TW 3500L (#882) + TW 950Q (#321, im Moment inaktiv), VPN offen, Reboot nach Rücksprache
Antworten

Zurück zu „Zusätzliche Logikbausteine“