Vitoconnect - Verbesserte Version

Begonnen von stefanru, 14 Dezember 2024, 23:32:17

Vorheriges Thema - Nächstes Thema

Beta-User

Moin Stefan,

hatte vorhin kurz Zeit, um mal einen ersten Blick in das Modul zu werfen - eigentlich v.a., weil mich das mit der Fehlerbehandlung für die kaputten Umlaute "drumrum" interessiert hat.

Ein paar Dinge sind mir aufgefallen:
- Bisher habe ich praktisch kein (fremdes) Modul gesehen, das beim "cruel"-Check auf "perlcritic.com" so wenig "critics" gezeigt hat wie deines! Hut ab!!!
- Du hast nur an einer (?) Stelle das "decode_json()" durch die "JSON-new->decode()"-Variante getauscht. Absicht/Vorsicht/nur ein erster Test?
- Die "eval {}"-Variante mit anschließender unabhängiger Prüfung, ob irgendwelche Fehler in $@ sind hat einen großen, aber schwer zu entdeckenden Haken: Das schlägt auch an, wenn bereits vorher - eventuell aus ganz anderen Gründen - ein Fehler hinterlegt ist. Bin da irgendwann in der Vergangenheit (MPD?) drüber gestolpert, seitdem ist das hier mein Standardcode:
Zitatmy $decoded;
    if ( !eval { $decoded  = JSON->new->decode($content) ; 1 } ) {
        Log3($hash->{NAME}, 1, "JSON decoding error in languagefile $cfg: $@");
        return "languagefile $cfg seems not to contain valid JSON!";
    }
    return if !defined $decoded;
Zitat von: Schlimbo am 20 Februar 2025, 21:04:56mein System ist
Danke für die Infos - also alles mehr oder weniger so aktuell, wie es nur geht :) .

Da der Fix von Stefan zu greifen scheint, können wir m.E. das Thema erst mal auf die Seite legen, ansonsten wäre es (wegen der Wechselwirkungen mit FHEMWEB) vermutlich sinnvoll, diesen Teilaspekt wirklich separat zu diskutieren.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

JWRu

Mir ist noch eine Sache aufgefallen und ich wollte mal fragen, ob das bei den anderen Anwendern auch so ist:
Die Readings, die Zeitpläne enthalten (bei mir "heating.circuits.0.heating.schedule.entries", "heating.dhw.pumps.circulation.schedule.entries" und "heating.dhw.schedule.entries") werden bei jeder API-Abfrage aktualisiert.
Der Inhalt ist immer der gleiche, allerdings tauchen die Wochentage jedesmal in einer anderen Reihenfolge auf. Dabei sind die Wochentage bunt durcheinander gewürfelt - hier ein Beispiel:
{"wed":[{"mode":"normal","start":"06:00","position":0,"end":"22:00"}],"sat":[{"position":0,"end":"22:00","mode":"normal","start":"06:00"}],"thu":[{"start":"06:00","mode":"normal","end":"22:00","position":0}],
"mon":[{"position":0,"end":"22:00","mode":"normal","start":"06:00"}],"sun":[{"mode":"normal","start":"06:00","end":"22:00","position":0}],"fri":[{"start":"06:00","mode":"normal","end":"22:00","position":0}],
"tue":[{"mode":"normal","start":"06:00","end":"22:00","position":0}]}
Dadurch greift auch mein event-on-change-reading .* nicht und es wird jedesmal ein Event ausgelöst.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

stefanru

#137
Hi JWRu,

ja das ist eine offene Baustelle. Darum wollte ich mich irgendwann kümmern.
Die Readings vom Type "Schedule" sind nicht so toll.
Da das ganze als ein JSON kommt und in ein Hash gelesen wird ist die Reihenfolge keineswegs garantiert.
Auch finde ich das Setzen so nicht optimal.

Ich kann mich daran machen das zu verbessern, war bisher niedrigste prio.
Irgendein Wunsch bzw. eine Idee wie das am besten gelöst werden sollte?

Gruß,
Stefan

JWRu

Das hat wirklich keine hohe Priorität!
ZitatIrgendein Wunsch bzw. eine Idee wie das am besten gelöst werden sollte?
Vielleicht nach Wochentagen (mon..sun) sortieren? Dann ändert sich das Reading nicht dauernd.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

stefanru

Ok, das habe ich mal eingebaut und es liegt in meinem Git.
Gibt es morgen mit dem Update.

Trotzdem finde ich diese Readings schwierig und wüsste auch auf anhieb nicht wie ich sie in FHEM sinnvoll mit einem schönen UI Element befüllen soll.
Wenn jemand ne Idee hat gerne melden.

Erstmal eine neue Version mit diesen 2 Änderungen:
  "0.8.3"  => "23.02.2025  fix order of days for type schedule readings",
  "0.8.2"  => "22.02.2025  improved state reading in case of unknown error",

Gruß,
Stefan

Beta-User

weekprofile?

(analog dazu, wie es bei MQTT2_DEVICE gelöst ist)

Bei Gelegenheit schau ich mir das mal an.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

JWRu

Zitatweekprofile?
Das ist eine gute Idee - nutze ich für meine HomeMatic Thermostatventile.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

stefanru

Hi,

ja weekprofile klingt super und müsste passen.
Benutze ich ja auch für meine MAX Thermostate.

Müsste man aber etwas anpassen da mode und position mitgegeben werden muss.

Die Vitocal hat 2 Scheduler (heating und dhw):
  {
      "feature": "heating.circuits.0.heating.schedule",
      "gatewayId": "7736172146035226",
      "deviceId": "0",
      "timestamp": "2025-02-23T04:35:06.658Z",
      "isEnabled": true,
      "isReady": true,
      "apiVersion": 1,
      "uri": "https://api.viessmann.com/iot/v2/features/installations/2772216/gateways/7736172146035226/devices/0/features/heating.circuits.0.heating.schedule",
      "properties": {
        "entries": {
          "type": "Schedule",
          "value": {
            "mon": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ],
            "tue": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ],
            "wed": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ],
            "thu": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ],
            "fri": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ],
            "sat": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ],
            "sun": [
              {
                "mode": "normal",
                "start": "05:30",
                "end": "24:00",
                "position": 0
              }
            ]
          }
        },
        "active": {
          "type": "boolean",
          "value": true
        }
      },

      "feature": "heating.dhw.schedule",
      "gatewayId": "7736172146035226",
      "deviceId": "0",
      "timestamp": "2025-02-23T04:35:06.658Z",
      "isEnabled": true,
      "isReady": true,
      "apiVersion": 1,
      "uri": "https://api.viessmann.com/iot/v2/features/installations/2772216/gateways/7736172146035226/devices/0/features/heating.dhw.schedule",
      "properties": {
        "entries": {
          "type": "Schedule",
          "value": {
            "mon": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ],
            "tue": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ],
            "wed": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ],
            "thu": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ],
            "fri": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ],
            "sat": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ],
            "sun": [
              {
                "mode": "on",
                "start": "00:00",
                "end": "01:00",
                "position": 0
              },
              {
                "mode": "on",
                "start": "05:00",
                "end": "24:00",
                "position": 1
              }
            ]
          }
        },
        "active": {
          "type": "boolean",
          "value": true
        }
      },

Gruß,
Stefan

Beta-User

Zitat von: stefanru am 24 Februar 2025, 09:11:33Die Vitocal hat 2 Scheduler (heating und dhw):
Meine Idee:
- weekprofile gibt die Info, dass das topic aktualisiert wurde
- Vitoconnect holt sich die beiden Profile für heating und dhw
- gleicht es intern auf Änderungen ab
- und schickt es dann weiter, wenn geändert.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

stefanru

Hi Beta-User,

ja das klingt super.

Willst du DHW und Heating zusammen verarbeiten?
Oder 2 Weektimer, einen für Heating und einen für DHW?

Macht vieleicht auch Sinn weil z.B. meine Vitoladens wiederrum nur einen Scheduler hat:
heating.circuits.0.heating.schedule.entries
[{"mon":[{"position":0,"end":"24:00","mode":"normal","start":"06:00"}]},{"tue":[{"position":0,"mode":"normal","end":"24:00","start":"06:00"}]},{"wed":[{"position":0,"mode":"normal","end":"24:00","start":"06:00"}]},{"thu":[{"mode":"normal","end":"24:00","start":"06:00","position":0}]},{"fri":[{"start":"06:00","mode":"normal","end":"24:00","position":0}]},{"sat":[{"position":0,"start":"06:00","mode":"normal","end":"24:00"}]},{"sun":[{"position":0,"mode":"normal","end":"24:00","start":"06:00"}]}]

Und wir wissen ja auch nicht ob es bei 2 Heizkreisen dann auch noch mehr Scheduler gibt.

Ich denke pro Scheduler ein Weekprofile wäre gut, oder?

Gruß,
Stefan

JWRu

ZitatErstmal eine neue Version mit diesen 2 Änderungen:
  "0.8.3"  => "23.02.2025  fix order of days for type schedule readings"

Die neue Version ist zwar jetzt nach Wochentagen sortiert, löst aber immer noch Events aus, weil sich die Reihenfolge innerhalb der Wochentage ändert.
Hier ein Beispiel:
Ausgangszustand:[{"mon":[{"position":0,"end":"22:00","mode":"normal","start":"06:00"}]},{"tue":[{"start":"06:00","mode":"normal","end":"22:00","position":0}]},{"wed":[{"mode":"normal","start":"06:00","end":"22:00","position":0}]},{"thu":[{"mode":"normal","start":"06:00","end":"22:00","position":0}]},{"fri":[{"position":0,"end":"22:00","start":"06:00","mode":"normal"}]},{"sat":[{"start":"06:00","mode":"normal","position":0,"end":"22:00"}]},{"sun":[{"mode":"normal","start":"06:00","end":"22:00","position":0}]}]nach API-Abfrage:[{"mon":[{"end":"22:00","position":0,"mode":"normal","start":"06:00"}]},{"tue":[{"position":0,"end":"22:00","mode":"normal","start":"06:00"}]},{"wed":[{"end":"22:00","position":0,"start":"06:00","mode":"normal"}]},{"thu":[{"mode":"normal","start":"06:00","end":"22:00","position":0}]},{"fri":[{"mode":"normal","start":"06:00","position":0,"end":"22:00"}]},{"sat":[{"position":0,"end":"22:00","mode":"normal","start":"06:00"}]},{"sun":[{"start":"06:00","mode":"normal","position":0,"end":"22:00"}]}]
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter

Beta-User

Zitat von: stefanru am 24 Februar 2025, 09:54:31Ich denke pro Scheduler ein Weekprofile wäre gut, oder?
In meiner Installation gibt es im Moment nur eine einzige weekprofile-Instanz, und mein Plan wäre gewesen, darüber die komplette Heizung (incl. Therme usw.) abzudecken; Profilwechsel erfolgt dann nur über "usetopics". Intern nutze ich eine ganze Reihe von Referenzierungen von ein paar wenigen Basisprofilen.

Das ist aber m.E. kein "Muss".

Würde vorschlagen, erst mal "das Hauptgerät" anzugehen. Dazu muss einfach ein userAttr "wekprofile" an das Device ran, ein entsprechender setter da sein, und weekprofile (afair gerüngfügig) aufgebohrt werden.

Die weiteren "Unterdevices" (oder sheduler oä.) könnte man dann über weitere userAttr ergänzen, aber bevor wir den ersten Schritt nicht im Detail verstanden haben, macht es m.E. wenig Sinn, den weiteren Ausbau oder gar die Syntax zu diskutieren. Grundsätzlich sollte es möglich sein, auch Profile aus weiteren weekprofile-Instanzen abzurufen, wobei der gesamte Prozess eben durch "das Hauptgerät" angeschubst werden würde.

Hoffe, das eventuell über das WE oder nächste Woche mal auch praktisch angehen zu können...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

stefanru

@JWRu: Ok das schaue ich mir an und sortiere das auch noch.

@Betra-User: Ok, das fände ich super wenn du dir das mit dem weekprofile anschauen könntest. Danke!

Gruß,
Stefan

stefanru

@JWru:

hier eine neue Version. Kannst du sie mal testen?
  "0.8.4"  => "24.02.2025  also order mode, start, end, position in schedule"

Wirklich gefallen tut es mir nicht da ich die Werte an denen sortiert wird fest vorgeben muss.
Eventuell fällt mir noch was besseres ein, aber erstmal schauen ob es so für dich tut.

Gruß,
Stefan


JWRu

Zitathier eine neue Version. Kannst du sie mal testen?
  "0.8.4"  => "24.02.2025  also order mode, start, end, position in schedule"
Funktioniert - vielen Dank!
Für mich ist das prima so - ich mache Änderungen an den Zeitplänen zu Zeit eh mit der ViCare-App.
Schauen wir mal was aus dem "Weekprofile-Projekt" wird - ich bin gespannt. 
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon-Sensoren; TFA-Sensoren; Steuerung Viessmann-Heizung; Arduinos für Strom-, Wasser-, Gaszähler, Rauchmelder und FI-Schutzschalter