Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

getmode removed #18246

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

getmode removed #18246

wants to merge 7 commits into from

Conversation

deadrabbit87
Copy link
Contributor

fix #18245

@andig
Copy link
Member

andig commented Jan 16, 2025

Oder alle Modi mappen?

@andig andig added the devices Specific device support label Jan 16, 2025
@deadrabbit87
Copy link
Contributor Author

deadrabbit87 commented Jan 16, 2025

Kann man machen, sind aber 35 Zustände. Sinnvoller wäre es da aber, man nimmt die Register von SG1 und SG2.

Aber da bräuchte es eine logische Abfrage im Template... Siehe auch die Diskussion in Slack, da hatte ich das schon erwähnt:

SG1 && !SG2 : 3 # Stop
!SG1 && !SG2 : 2 # normal
!SG1 && SG2 : 1 # Boost

Du meintest daraufhin, man solle getmode weglassen...

@andig
Copy link
Member

andig commented Jan 16, 2025

Also wenn du sg1 und 2 über Modbus abfragen kannst lassen die sich auch z.B. mit dem Go Plugin verknüpfen.

@deadrabbit87
Copy link
Contributor Author

Hast du da ein Beispiel zur Hand?

Hab gerade keine Idee, wie das geht.

@deadrabbit87
Copy link
Contributor Author

Danke, aber ich hätte das jetzt 3 h lang versucht zu verstehen, komme aber auf keine grünen Zweig.

Das einzige von dir verlinkte Template wo go verwendet wird, wäre das vom Sungrow. https://github.com/evcc-io/evcc/blob/6cdd84453b9f72aa5f48004ab121030c14fc7914/templates/definition/meter/sungrow-hybrid.yaml

Aber auch da habe ich keine Ahnung was da passiert:

        - source: go
          script: power
          in:
          - name: power
            type: int
            config:
              source: modbus
              {{- include "modbus" . | indent 12 }}
              register:
                address: 5627 # BDC rated power
                type: input
                decode: uint16
              scale: 100
          out:

@premultiply
Copy link
Member

Ist doch eigentlich ganz einfach:
Das wahnsinnig umfangreiche go-script power (ja, das ist alles!) liest eben diese Variable von in und gibt sie anschließend nach out zurück.

@deadrabbit87
Copy link
Contributor Author

Und wo ist das Script?

Ist es das hier?

Das oben ist ja nachzuvollziehe, aber wo kann ich nachsehen, was man alles verwenden kann?

@andig
Copy link
Member

andig commented Jan 17, 2025

@deadrabbit87 sollen wir dem map Plugin noch einen default Case einbauen?

@deadrabbit87
Copy link
Contributor Author

Was soll der dann machen?

Das oben ist ja nachzuvollziehe, aber wo kann ich nachsehen, was man alles verwenden kann?

Kannst du mir das beantworten? Mir würde die Lösung über SG1 und SG2 schon besser gefallen.

Außer ihr seht perspektivisch einen Vorteil darin, mehr Zuständen der WP zu haben.

@andig
Copy link
Member

andig commented Jan 17, 2025

Ich hab ncoh ein besseres Beispiel raus gesucht (https://github.com/search?q=repo%3Aevcc-io%2Fevcc+%22source%3A+go%22+language%3AYAML+&type=code):

climater:
source: go
script: |
remoteClimateState != "off"
in:
- name: remoteClimateState
type: string
config:
source: mqtt
topic: saic/{{ .user }}/vehicles/{{ .vin }}/climate/remoteClimateState
timeout: {{ .timeout }}

@deadrabbit87
Copy link
Contributor Author

deadrabbit87 commented Jan 17, 2025

Danke für deine Mühe, aber das hilft irgendwie auch nichts. Ich glaube bei mir ist da Hopfen und Malz verloren.

Was ich irgendwie in wenig nachvollziehen kann, ist wie sgready.go funktioniert.

Bei dem Beispiel mit dem climater kann ich nur vermuten: remoteClimateState != "off" setzt den Zustand auf off. Ja und dann???

Es wird via mqtt ein Status ausgelesen, aber wie wird der verarbeitet? Und wozu hier in wenn kein out?

Und was macht hier script: |?

@deadrabbit87
Copy link
Contributor Author

Hab jetzt noch ein anderes Beispiel gefunden.

Wäre ich mit dem hier auf dem richtigen Weg? Ich mein klar, funktioniert noch nicht, aber wäre der Ansatz zumindest richtig?

  getmode:
    source: go
    script: |
      SG1 && SG2
    in:
      - name: SG1
        type: boolean
        config: 
          source: modbus
          {{- include "modbus" . | indent 5 }}
          register:
            address: 35101
            type: input
            encoding: uint16
      - name: SG2
        type: boolean
        config: 
          source: modbus
          {{- include "modbus" . | indent 5 }}
          register:
            address: 35102
            type: input
            encoding: uint16

@andig
Copy link
Member

andig commented Jan 18, 2025

Auf den ersten Blick: genau so 👍🏻

@deadrabbit87
Copy link
Contributor Author

deadrabbit87 commented Jan 19, 2025

Das ist echt zäh, aber jetzt bin ich zumindest schon mal bei go-Fehlermeldungen bzw. so was ähnlichem ;-)

@andig Kannst du mir nicht noch einen Tipp geben, wie das script (if SG1 == 0 && SG2 == 0 { 1 }) korrekt aussehen müsste?

  getmode:
    source: go
    script: |
      if SG1 == 0 && SG2 == 0 { 1 }
    in:
    - name: SG1
      type: int
      config: 
        source: modbus
        {{- include "modbus" . | indent 6 }}
        register:
          address: 35101
          type: input
          encoding: uint16
    - name: SG2
      type: int
      config: 
        source: modbus
        {{- include "modbus" . | indent 6 }}
        register:
          address: 35102
          type: input
          encoding: uint16
[main  ] INFO 2025/01/19 21:07:30 evcc 737f56eb (737f56eb)
[main  ] INFO 2025/01/19 21:07:30 using config file: ../../evcc.yaml
[db    ] INFO 2025/01/19 21:07:30 using sqlite database: /home/ubuntu/.evcc/evcc.db
Temp:          37°C
Charge status: 
Enabled:       false
Features:      [Heating IntegratedDevice]

@andig
Copy link
Member

andig commented Jan 19, 2025

Sowas?

min(3, 1+ 2*SG1 + SG2)

oder was brauchst du?

@deadrabbit87
Copy link
Contributor Author

Sowas?

min(3, 1+ 2*SG1 + SG2)

oder was brauchst du?

Ich möchte nur die ausgelesenen Werte von SG1 und SG2 logisch verknüpfen und dann Normal, Boost oder Stop setzen.

@andig
Copy link
Member

andig commented Jan 20, 2025

Ich verstehe die Frage wohl nicht. Sowas?

res := 1
switch {
case SG1 == 1 && SG2 == 0: res = 3
case SG1 == 0 && SG2 == 0: res = 2
}
res

Evtl. geht es auch ohne die letzte Zeile.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devices Specific device support
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Weishaupt WPM (SG Ready) - Charger enabled: map: value not found: 9
3 participants