Widget mit Switch analyzer schalt zeit berechnen .

Allgemeine Fragen zum Thema "Smart Home" und Entscheidungshilfen

Moderator: seppy

marci-cr
Beiträge: 8
Registriert: 10. Sep 2021 09:11

Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von marci-cr »

hallo liebe gemeinde :)

ich bräuchte eure hilfe bei einem widget
im großen und ganzen funktioniert es NUR ein paar kleinigkeiten möchte ich noch verbessern.

Standart Ansicht in der Overview

https://bilderupload.org/bild/c4f794992-solar1

Ansicht wen ich das Widget öffne

https://bilderupload.org/bild/c2ed95088-solar2

SRY wegen dem bilder upload aber beim einfügen steht später nur BILD??

soweit so gut !! Die schaltvorgänge der Steckdose (mit MQTT) wird angezeigt.

Das ist der Code aus dem Widget..

Code: Alles auswählen

component: oh-label-card
config:
  actionAnalyzerCoordSystem: time
  actionAnalyzerItems:
    - Curantee00_Curantee00
  background: "linear-gradient(to bottom right, #d6d5d5 0%, #4969a8 100%)"
  dataZoom:
    - component: oh-chart-datazoom
      config:
        type: inside
  expandable: true
  grid:
    - component: oh-chart-grid
      config:
        includeLabels: true
  icon: oh:energy
  iconUseState: false
  item: Curantee00_Curantee00
  legend:
    - component: oh-chart-legend
      config:
        bottom: 3
        type: scroll
  series:
    - component: oh-time-series
      config:
        areaStyle:
          opacity: 0.2
        gridIndex: 0
        item: SolarBatterie_SolarBatterie
        markLine:
          data:
            - type: average
        markPoint:
          data:
            - name: min
              type: min
            - name: max
              type: max
          label:
            backgroundColor: auto
        name: SolarBatterie
        type: line
        xAxisIndex: 0
        yAxisIndex: 0
  stateAsHeader: true
  title: Solar Ladegerät
  tooltip:
    - component: oh-chart-tooltip
      config:
        confine: true
        smartFormatter: true
  trendGradient:
    - "#000000"
  trendItem: Curantee00_Curantee00
  trendStrokeWidth: 5px
  vertical: true
  xAxis:
    - component: oh-time-axis
      config:
        gridIndex: 0
  yAxis:
    - component: oh-value-axis
      config:
        gridIndex: 0
        max: 15
        min: 10
        minorSplitLine:
          show: true
        minorTick:
          show: true
        scale: false
        splitArea:
          show: true
  action: analyzer
slots: null


was ich jetzt noch gerne möchte ist das es mir die gesamtzeit des schlatvorganges in Stunden ggf in KWh zusammen rechnet.
da ich weis das es um 80 - 85 Watt verbrauch in der Stunde handelt.

Um lösungs und verbesserungs vorschläge bin ich offen.
Auch wenn mir jemand sagt das der Code so ungeignet ist. Ich habe ihn aus einem anderem Forum um ursprünglich ein DHT11 thermo sensor anzeigen zu lassen. mit Graph line.

Mfg

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von udo1toni »

Ich schätze, das wird so nicht gehen. Die Datenbank gibt Dir solche Informationen einfach nicht raus. Du könntest mit einem Hilfsitem arbeiten, welches Du minütlich mit einer 1 oder einer 0 befüllst, je nachdem, ob der Aktor ON oder OFF ist. Dann kannst Du über die Persistence dieses Items mittels sumSince(Zeitstempel) die Summe der Werte ausgeben, was dann eben der Anzahl an Minuten entspricht. Allerdings weiß ich nicht, was mit längeren Zeiträumen passiert (rrd4j ist die Default Persistence, welche dann gewöhnlich angewendet wird - sie fasst aber die Historie in mehreren Schritten zusammen).

Was die Bilder betrifft, so kannst Du Bilder direkt hier hochladen, über den vollständigen Editor. Dort besteht auch die Möglichkeit, ein hochgeladenes Bild direkt einzubetten. Oder Du nutzt die hochgeladenen Bilder, aber nicht den von Bilderupload angegebenen Link, sondern den direkten Link zur Grafik (dabei wird soweit ich gesehen habe lediglich ein Teil der URL ersetzt - statt bild steht dann dort image, am Ende muss noch die Endung .png ergänzt werden. Im Zweifel wählst Du aus dem Kontextmenü der Grafik "Grafik in neuem Tab anzeigen" und kopierst diesen Link)
Externe Bilder kannst Du einfach mit dem img-Tag einbetten img=http-adresse in eckigen Klammern plus schließendes img-Tag:
Bild
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

marci-cr
Beiträge: 8
Registriert: 10. Sep 2021 09:11

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von marci-cr »

das mit rrdj4 weis ich das die daten mit der zeit ungenauer werden (glaube Komprimiert auf das wichtigste) ... mir würde reichen was in einer woche oder besser pro Monat währe. habe es auch nebenher mit influxdb und grafana probieret ( NOCH AM PROBIEREN)

Aber wie schreibe ich das mit dem ZITAT... Du könntest mit einem Hilfsitem arbeiten, welches Du minütlich mit einer 1 oder einer 0 befüllst, je nachdem, ob der Aktor ON oder OFF ist. Dann kannst Du über die Persistence dieses Items mittels sumSince(Zeitstempel) die Summe der Werte ausgeben, was dann eben der Anzahl an Minuten entspricht. ...

wenn Sie / du mir da ewas hilfes gibst oder ggf ein guten Link mit dem ich Arbeiten kann währe sehr hilfreich.

MFG

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von udo1toni »

Immer gerne Du :) wir sind hier eher Kumpel als Lehrer...

rrd4j speichert intern die Werte in unterschiedlicher zeitlicher Auflösung. Dabei werden jeweils in der nächstschlechteren Auflösung Werte zusammengefasst. Wenn die höchste Auflösung also z.B. 1 Minute ist und die zweithöchste Auflöung 10 Minuten, so wird rrd4j aus zehn 1-Werten einen 1-Wert machen. Eventuell macht es aus 5 1-Werten plus 5 0-Werten ein 0,5, kann aber auch sein, dass es auch hier eine 1 macht, aber aus 4 1-Werten und 6 0-Werten eine 0. Wie genau die Werte miteinander verrechnet werden, weiß ich halt nicht. Und beim Auslesen kann es eben sein, dass dann nur eine 1 gezählt wird, obwohl es eigentlich 10 sein müssten. Das ist eben die Frage...

Hilfsitem:

Du legst einfach ein Numbver Item an (über die Einstellungen->Items->rechts unten das weiße plus im blauen Kreis) und dieses Item wird mit keinem Channel verlinkt.
Stattdessen legst Du eine Rule an (ich verwende hier die DSL in Textform, geht aber auch über die UI)

Code: Alles auswählen

rule "update item"
when
    Time cron "1 * * * * ?"
then
    if(MeinSwitch.state != ON)
        MeinNumberItem.postUpdate(0)
    else
        MeinNumberItem.postUpdate(1)
end
Das Item MeinNumberItem ist das ungebundene Item, welches extra angelegt wurde. Das Item muss mit everyUpdate als Persistence Strategy persistiert werden. Fortan landet einmal pro Minute eine eins oder eine null im Item und damti auch in der Persistence.

Und dann kannst Du in einer anderen Rule die Summe auslesen und berechnen:

Code: Alles auswählen

rule "get sum"
when
    Time cron "2 * * * * ?"
then
    Anzeige24h.postUpdate(MeinNumberItem.sumSince(now.minusDays(1)))
    Anzeige7d.postUpdate(MeinNumberItem.sumSince(now.minusDays(7)))
end
Diese Berechnung könnte man natürlich auch in der ersten Rule mit einbauen, wobei die Persistence immer ein paar Millisekunden braucht, kann alos sein, dass die Anzeige dann immer etwas hinterher hinkt.
Um den Verbrauch zu berechnen, könntest Du die Zahl mit der Leistung multiplizieren und durch 60 teilen, um Wh zu erhalten.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

marci-cr
Beiträge: 8
Registriert: 10. Sep 2021 09:11

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von marci-cr »

Vielen Dank :)

ich werde es später oder morgen vormittag mal testen.
ich hoffe das alles gut geht. werde mich zurück melden.

hoffe das es auch anderen Usern weiterhilft.

marci-cr
Beiträge: 8
Registriert: 10. Sep 2021 09:11

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von marci-cr »

habe es jetzt versucht komme aber nicht ganz zurecht.

das ist der Code um die Steckdose für das ladegerät einzuschalten

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      cronExpression: 0 0/5 * * * ? *
    type: timer.GenericCronTrigger
conditions:
  - inputs: {}
    id: "3"
    configuration:
      itemName: SolarBatterie_SolarBatterie
      state: "11.90"
      operator: <
    type: core.ItemStateCondition
actions:
  - inputs: {}
    id: "2"
    configuration:
      itemName: Curantee00_Curantee00
      command: ON
    type: core.ItemCommandAction

das ist der Code um es aus zu schalten der 60 sec timer ist für die lade schlußspannung da sie am schluss schwankt.

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      cronExpression: "* 0/5 * * * ? *"
    type: timer.GenericCronTrigger
conditions:
  - inputs: {}
    id: "3"
    configuration:
      itemName: SolarBatterie_SolarBatterie
      state: "14.38"
      operator: ">="
    type: core.ItemStateCondition
actions:
  - inputs: {}
    id: "2"
    configuration:
      command: OFF
      itemName: Curantee00_Curantee00
    type: core.ItemCommandAction
  - inputs: {}
    id: "4"
    configuration:
      blockSource: <xml xmlns="https://developers.google.com/blockly/xml"><block
        type="oh_sleep" id="yn(`IG:iE:[h}Ub9?Ync" x="85" y="4"><field
        name="milliseconds">600000</field></block></xml>
      type: application/javascript
      script: |
        var thread = Java.type('java.lang.Thread')
        thread.sleep(600000);
    type: script.ScriptAction



das ist der code Rule die ich versucht habe von dir aber er zeigt nichts im item an.

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      cronExpression: 0 * * * * ? *
    type: timer.GenericCronTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: |-
        rule "update item"
        when
            Time cron "1 * * * * ?"
        then
            if(Curantee00_Curantee00.state != ON)
                SolarTracker.postUpdate(0)
            else
                SolarTracker.postUpdate(1)
        end
    type: script.ScriptAction
  - inputs: {}
    id: "3"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: |-
        rule "get sum"
        when
            Time cron "2 * * * * ?"
        then
            Anzeige24h.postUpdate(SolarTracker.sumSince(now.minusDays(1)))
            Anzeige7d.postUpdate(SolarTracker.sumSince(now.minusDays(7)))
        end
    type: script.ScriptAction

habe ich da etwas grundsätzlcih falsch gemacht?

da das SolarTracker (number) item nichts anzeigt.


kann ich ggf auch meine vorhanden ersten 2 Codes passend abändern? den so wie sie sind funktionieren Sie ja wie ja auch im ersten post gezeigt mit den ScreenShots.

Mfg

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von udo1toni »

:)

Dein Time cron Ausdruck in Deiner 2. Regel ist falsch. "* 0/5 * * * ? *" bedeutet: alle fünf Minuten jede Sekunde. Was das Sleep da soll, erschließt sich mir nicht, denn es hat keinerlei Auswirkungen. Allenfalls verhindert es, dass die Rule dann sekündlich gestartet wird, weil es die Rule blockiert. Aber das wäre leichter zu erreichen, wenn Du den ersten Stern mit einer Zahl ersetzt, wie in der ersten Rule.

Was meine Rules betrifft, so hatte ich ja darauf hingewiesen, dass die Rules für DSL in Textform geschrieben sind.
Das bedeutet, dass der Trigger mit in der jeweiligen Rule steht.
Wenn Du den Code über die UI eingeben willst, musst Du nur den Teil zwischen then und end einfügen (ohne diese beiden Schlüsselworte). Der Teil zwischen when und then entspricht dem Trigger der Rule.

Der Trigger wurde von mir auf eine Sekunde bzw. zwei Sekunden nach der vollen Minute festgelegt, um sicherzustellen, dass das Item schon den passenden Zustand hat.

Es handelt sich um zwei Rules, die du auch getrennt anlegen musst.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

marci-cr
Beiträge: 8
Registriert: 10. Sep 2021 09:11

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von marci-cr »

Titat... Dein Time cron Ausdruck in Deiner 2. Regel ist falsch. "* 0/5 * * * ? *" bedeutet: alle fünf Minuten jede Sekunde ....

wie soll ich es sonst einstellen das alle 5 min geprüft wird und dann 60 sekunden warten ob der wert wirklich unter 11.90 geht.

dies soll alle 5 min Prüfen ob Die Volt Zahl im bereich ist von 11.90 Volt wenn es daruter geht für 60 sekunden (zweite rule) dann soll die steckdose
itemName: Curantee00_Curantee00 geschaltet werden.

Deine Rule habe ich in 2 rule´s geschrieben mit der UI funktion DSL (v1)

Code: Alles auswählen

configuration: {}
triggers: []
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: |-
        rule "update item"
        when
            Time cron "1 * * * * ?"
        then
            if(Curantee00_Curantee00.state != ON)
                SolarTracker.postUpdate(0)
            else
                SolarTracker.postUpdate(1)
        end
    type: script.ScriptAction

die 2 Rule

Code: Alles auswählen

configuration: {}
triggers: []
conditions: []
actions:
  - inputs: {}
    id: "1"
    configuration:
      type: application/vnd.openhab.dsl.rule
      script: |-
        rule "get sum"
        when
            Time cron "2 * * * * ?"
        then
            Anzeige24h.postUpdate(SolarTracker.sumSince(now.minusDays(1)))
            Anzeige7d.postUpdate(SolarTracker.sumSince(now.minusDays(7)))
        end
    type: script.ScriptAction

SolarTracker ist das Number Item
Curantee00_Curantee00 ist die Steckdose

Bis jetz geht es nicht :(

gäbe es ggf die Möglichkeit per Teamviever zu helfen oder mal kurz drüber zuschauen.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von udo1toni »

Und immer noch lässt Du den Teil rule .... when ... then und das letzte Wort end mit im Rule Code stehen. Das gehört da nicht hin!

Deine zweite Rule prüft alle fünf Minuten jede Sekunde, ob der Wert über der Ladeschlussspannung liegt (14.38). Bzw. Du möchtest, dass das so passiert. Das ist aber nicht der Fall. da Du als Action ein Sleep über 60 Sekunden angegeben hast, passiert genau das: Die Rule wird gestartet, prüft auf 14.38 oder größer und schaltet gegebenenfalls aus und löst den Sleep aus. Ansonsten prüft es halt innerhalb dieser 60 Sekunden jede Sekunden ob der Wert 14.38 erreicht wurde.
Du möchtest aber, dass der wert 14.38 mindestens eine Minute erreicht bzw. überschritten wird, das ist etwas anderes.

Beispielrule folgt...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Widget mit Switch analyzer schalt zeit berechnen .

Beitrag von udo1toni »

So, etwas nachgedacht.

Es gibt über die UI Rules sicher auch andere Möglichkeiten, aber ich versuche mal eine möglichst einfache Lösung zu präsentieren.

openHAB hat eine Funktion, die expiration Timer heißt. Jedes Item kann mit einer Expiration versehen werden und löst dann nach Ablauf der eingetragenen Zeit entweder einen Befehl oder auch nur einen Statuswechsel aus. Dabei reicht es, das Item regelmäßig zu retriggern, um den expire Befehl zu verhindern (das kann man auch verhindern, hier brauchen wir diesen Retrigger aber).

Die Idee ist nun, den Schalter Curantee00_Curantee00 mit einer expiration von 6 Minuten und dem Befehl OFF zu versehen. Wahlweise gehen auch kürzere Zeiten, es muss nur sichergestellt werden, dass der Messwert SolarBatterie_SolarBatterie in einem kürzeren Abstand aktualisiert wird.

Die Einschaltrule triggert, wenn die Spannung unter 11.9 Volt gesunken ist und schaltet den Schalter ein.
Eine zweite Rule (die für das Halten im eingeschalteten Zustand zuständig ist) triggert, wenn die Spannung unter 14.38 Volt ist, aber nur, wenn Curantee00_Curantee00 den Zustand ON hat. Sie tut nichts anderes, als per postUpdate den Status des Items Curantee00_Curantee00 auf ON zu halten.
Diese Rule wird nach Erreichen der Ladeschlussspannung nicht mehr getriggert und in der Folge schaltet Curantee00_Curantee00 über die Expiration nach 6 Minuten (oder entsprechend früher) ab.
Am besten arbeitest Du nicht mit Time cron, sondern mit Wertänderung als Trigger (mindestens für die zweite Rule - dort könnte sogar das reine Update des Messwerts als Trigger geeignet sein, kommt etwas auf die Messmethode an). Ändert sich der Messwert kurz, so muss der Wert 14.38 mindestens 6 Minuten am Stück nicht unterschritten werden.

Ich bin momentan noch auf der Arbeit, aber wenn ich zuhause bin, kann ich die Rules mal über die UI einklappern, damit Du siehst, wie der Code aussehen muss.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten