HomematicIP (local) meldet keine neue Raspberrymatic-Firmwareversion an HA

Hallo werte HA-Gemeinschaft,
ich habe folgendes Problem (und finde seit Wochen keine Lösung):

Wenn ich mich in der Raspberrymatic anmelde, dann sehe ich auf der Startseite, dass eine neue Firmwareversion vorliegt (siehe Bild1).
grafik

In HA finde ich aber keinen Sensor, der mich über ein Firmware-Update informieren würde. Auch erhalte ich unter “Einstellungen” keinen Hinweis.

Alle anderen Sensoren / Entitäten werden über die Integration an HA durchgereicht. (Siehe Bild2)
grafik

Wo liegt der Fehler bzw. was mache ich falsch?

Vielen Dank für eure Hilfe.

Nichts. Es gibt keine Variabel / Sensor für Firmware-Updates der Raspberrymatic. Habe selbst auch noch kein Skript gefunden womit man evtl. auf der Raspberrymatic eine Variabel mit der Info schreiben könnte.

@ciddi89
Vielen Dank für die Antwort. Ich habe nun zwei alternative Ideen:

  1. Ich eröffne eine Anfrage beim Raspberrymatic-Forum oder bei Daniel Perna (HomematicIP local), ob es hierzu eine Erweiterung gegen kann.
    Das wird vermutlich dauern.

oder

  1. Ich habe beim Recherchieren “irgendwo” ein “CCU-Script” gesehen, welches über eine URL eine Seite von Jens Maus aufruft und dann aus der Antwort herausliest, welches die aktuelle Firmwareversion ist. Dies könnte man analog mit der Anleitung von Simon “Mit Home Assistant Webseiten-Daten auslesen & in Entitäten sichern” umsetzen und per Automation ausführen. - Nur muss ich dieses CCU-Script wieder finden.

Ich melde mich dann wieder.
Viele Grüße

Ich bin inzwischen einen Schritt weiter - das Auslesen einer Webseite funktioniert. Die “latest”-Version wird ermittelt und in eine Entität gespeichert.

Bild1 zeigt den Inhalt der Entität:
grafik

Bild2 zeigt den Auszug aus der configuration.yaml
grafik

Grundlegende Erklärung der Funktionsweise bitte dem Video von @simon42 entnehmen.
Eine Anmerkung zum select-Statement - rot-umrahmte Sterne habe ich nur eingefügt, damit das komplette Statement in der Hardcopy sichtbar ist.

# Example configuration.yaml entry
  - resource: https://github.com/jens-maus/RaspberryMatic/releases/latest
    scan_interval: 3600
    sensor:
      - name: "Raspberrymatic_new_version"
        select: "#repo-content-pjax-container > div > div > div > div.Box-body > div.d-flex.flex-md-row.flex-column > div.d-flex.flex-row.flex-1.mb-3.wb-break-word > div.flex-1 > h1" 
        unique_id: 'raspberry_neue_version'
        value_template: '{{ value.split(" ")[1] }}'

Was jetzt noch fehlt: Vergleich der jeweils stündlich eingeholten Versionsnummern und bei Differenz (=neue Version vorhanden) eine Information, dass ich einen Raspberrymatic-Firmware-Update einspielen kann.

Wer kann mir hier weiterhelfen?

PS: Sicher könnte ich einfach täglich direkt in der Raspberrymatic-VM nachschauen, das wäre aber doch EDV zu Fuß - oder?

:crayon:by HarryP: Codezeilen formatiert (bitte über </> einbinden)

Hab da eine Lösung. Ich arbeite das noch eben aus und bearbeite dann den Text hier. :stuck_out_tongue:

// Edit:

Soo hier mein Lösungsansatz um die aktuelle Raspberrymatic Firmware und Rega Version auszulesen und als Variabel an Home Assistant weiter zu geben.

Als erstes erstellen wir auf der Raspberrymatic eine Variabel in Format String mit dem Namen
SV_Firmware und eine mit den Namen SV_ReGa_Version

Dann erstellen wir ein neues Programm auf der Raspberrymatic. Lassen den Trigger aber Leer damit das Program bei jedem Neustart getriggert wird. Bei Aktivität Dann wählen wir Skript und fügen folgenden Code ein:

! Firmwareversion
! ==============
string version;
system.Exec("cat /boot/VERSION | head -1 | cut -d'=' -f2", &version);
dom.GetObject("SV_Firmware").State(version);
dom.GetObject("SV_ReGa_Version").State(dom.BuildLabel());

Ihr könnt dann schonmal auf ausführen klicken und dann auf ok. Damit sollte die Variabel dann auch schon beschrieben worden sein.
Wenn ihr die Rega Version nicht braucht / haben wollt einfach die letzte Zeile löschen, die dazugehörige Variabel braucht ihr dann natürlich anfangs auch nicht erstellen. Wenn ihr dann dem Programm einen Namen gegeben habt einfach auf Ok das Programm speichern.

In Home Assistant braucht ihr dann nur die neuen Variabeln aktivieren (Falls diese noch nicht da sind einfach die Integration einmal neu laden.) Und dann sollte das schon gewesen sein.

Wollt ihr nur die Ausgabe des Skripts direkt auf der Raspberrymatic testen um zu schauen ob die Ausgabe auch richtig ist reicht der Code:

string version;
system.Exec("cat /boot/VERSION | head -1 | cut -d'=' -f2", &version);
WriteLine(version);

// Edit2:

Ach ja @diddi vielen Dank noch eben für den Code um neue Firmware von der Github Seite von Jensmaus auszulesen. Mittlerweile braucht man Scrape Dienste auch nicht mehr per Configuration.yaml erstellen sondern kann diese auch per GUI machen. :slight_smile:

Hallo ciddi89,
man kann das auch über die GUI machen, aber dann konnte ich keinen Scan-Intervall angeben? Per default wir dann alle 600 Sekunden gescannt.

Ja das stimmt. Wobei man kann das Umständlich ändern. Egal, ich lass das erstmal so laufen und beobachte das mal. Bin mir auch nicht so sicher ob er derzeit wirklich alle 600sekunden scannt dann müsste sich zumindest der Zeitstempel von zuletzt aktualisiert sich ändern. Tat er aber bisher noch nicht.

Das mit der Variabel, von mir oben beschrieben, hat bei dir funktioniert?

Ich habe in Raspberrymatic die Variablen und das Programm angelegt und ausgeführt. Die beiden Variablen sind in HA sichtbar. :slightly_smiling_face:
Mir ist es noch unklar, wie man das Programm in der R-Matic einstellt, dass es z.B. alle Stunde (oder mehr) ausgeführt wird.

In der Regel sollte es ja ausreichen wenn es einmal nach Systemstart ausgeführt wird. Also Trigger leer lassen. Weil Updates sind ja sowieso immer mit Neustarts verbunden, sollte also so reichen. Möchtest du es dennoch jede Stunde oder wie auch immer ausführen dann einfach in dem Programm unter Bedingung Wenn dann Zeitmodul wählen und dort unter Serienmuster das muster wählen. Zb. Zeitintervall = Alle 2 stunden oder alle 3600 Sekunden oder wie auch immer. Der rest kann so angehakt bleiben wie es ist.

So sieht dann das ganze Programm aus:

Aber wie gesagt, macht für mich keinen Sinn das im Intervall zu prüfen.

Ich denke, dass 1 x am Tag ausreichend sein sollte.

1 „Gefällt mir“

Ich habe jetzt eine Zeitsteuerung so eingestellt, dass das R-Programm 1 x pro Tag ausgeführt wird.

Du schreibst, dass es ausreichend wäre, das Programm nach dem Systemstart automatisch auszuführen. Startest du Raspberrymatic regelmäßig?

Lieber ciddi89, ohne deine Hilfe wäre ich nicht so weit gekommen. Vielen Dank. :+1:

Eine Frage hätte ich doch noch: Wie kann ich in R-Matic nachschauen, ob und mit welchem Ergebnis das R-Programm gelaufen ist?

Nein tue ich nicht. Aber wenn man die Firmware aktualisiert, wird ja sowieso die Raspberrymatic neugestartet. Ohne Neustart wird sich die Versionsnummer sowieso nicht ändern also ist es m.E. ausreichend das die Version nur dann ausgelesen wird.

In der Raspberrymatic selber siehst du das unter Status und Bedingungen und dann Systemvariabel in der Spalte “Letzte Änderung” zeigt er an wann die Variabel zuletzt aktualisiert wurde. (Der Zeitstempel wird auch dann aktualisiert wenn der Wert sich nicht geändert hat, somit könnte man sehen wann das Programm zuletzt lief) Und er Wert steht dann halt in der letzten Spalte.

Hoffe ich konnt dir weiterhelfen und ich danke dir auch für den Scrape Code am Anfang. :slight_smile: Habe noch ein Templatesensor erstellt vom Typ Update der die Versionsnummer vergleicht damit ich dann eine Benachrichtigung bekomme wenn ein Update verfügbar ist. :slight_smile:

Hallo ciddi89,

ich habe ein R-Skript gefunden, welches auch die neueste Version ermitteln soll:

string newversion;
string curversion;
system.Exec("wget -q -O - --timeout=5 https://gitcdn.xyz/repo/jens-maus/RaspberryMatic/master/release/LATEST-VERSION.js | cut -d\\' -f2", &newversion);
system.Exec("grep VERSION= /VERSION | cut -d= -f2", &curversion);
boolean update = ( newversion.Trim() != curversion.Trim() );
dom.GetObject(ID_SYSTEM_VARIABLES).Get("CCU Firmware Status").State(update);
WriteLine(newversion);
string momentan;
system.Exec("grep VERSION= /VERSION | cut -d= -f2", &momentan);  
WriteLine(momentan);

Dies hat Jens Maus in einem Blog genannt - ich komme damit nicht zurecht.
Eventuell bekommst du das hin und man könnte dann das HA-scrape ersetzen?

PS: Das Auslesen der R-aktuellen Firmware-Version und ReGa-Version hast du ja schon. Also “nur” das mit dem URL-Zugriff.

Hallo @diddi
danke nochmal für das Skript. Dieser funktioniert aber nicht da es den Dienst gitcdn nicht mehr gibt. Außerdem speichert er nur in einer Variabel ob Updatebar = Wahr oder Falsch. Ich habe es trotzdem geschafft das Skript funktionsfähig zu bekommen. Und dieses Skript erfasst nun Aktuelle Version zum Downloaden + Aktuelle Version auf der RM + Ob Firmware Updatebar ist. Dafür musst du drei neue Variabeln erstellen mit den Namen
RM Firmware aktuell (Zeichenkette)
RM Firmware Latest (Zeichenkette)
RM Update (Logikwert)

Danach eine neue Automation. Als Trigger habe ich diesmal hier Zeitintervall = alle 6 Stunden.

string newversion;
string curversion;
string momentan;
system.Exec("wget -q -O - --timeout=5 https://raw.githubusercontent.com/jens-maus/RaspberryMatic/master/release/LATEST-VERSION.js | cut -d\\' -f2", &newversion);
system.Exec("grep VERSION= /VERSION | cut -d= -f2", &curversion);
boolean update = ( newversion.Trim() != curversion.Trim() );
dom.GetObject(ID_SYSTEM_VARIABLES).Get("RM Update").State(update);
dom.GetObject(ID_SYSTEM_VARIABLES).Get("RM Firmware Latest").State(newversion);
WriteLine(newversion);
system.Exec("grep VERSION= /VERSION | cut -d= -f2", &momentan);
dom.GetObject(ID_SYSTEM_VARIABLES).Get("RM Firmware aktuell").State(momentan);
WriteLine(momentan);

Hier ein Screenshot der Variabeln:

Möchtest du noch unbedingt die Rega Version auch noch haben? Dann Füge ich das auch noch eben mit ein. Dann hat man alles zusammen mit einem Script/Programm.

Ich hoffe du kannst damit was anfangen. :slight_smile:

1 „Gefällt mir“

Hallo ciddi89,

ich habe deinen Vorschlag umgesetzt und aktiviert - es funktioniert super.
Nochmals vielen Dank die prima Unterstützung, ohne dich hätte ich es aufgegeben.
Ich werde deine letzte Aktion als Lösung markieren.

Beste Grüße

Diddi

PS: Ich habe noch eine Frage in der Pipeline - diese werde ich als neuen Task einstellen. Es geht um den Export aus HA-HomematicIP-Cloud mit anschließendem Import in R-Matic.