CCU Skript um eine Variable im ioBroker abzufragen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von Fonzo » 08.10.2023, 21:19

WRadebeul hat geschrieben:
08.10.2023, 18:11
Problem:
Die unten gezeigten aktuellen Werte "Aktuell" sollen entsprechend des gewählten Zeitraumes veränderlich angezeigt werden.
Da sehe ich persönlich kein Problem darin, wenn Du eine Variable mit einem Wert zuweist, hat das System, dass diese Variable liefert auch dafür zu sorgen, dass beim umschalten der Graphen sich eben auch der Inhalt der Variable "Aktuell" anpasst. Du sendest also lediglich einen Befehl zum umschalten an Grafana und ioBroker und ioBroker hat dann den passenden Wert für die Variable "Aktuell" zu liefern.
WRadebeul hat geschrieben:
08.10.2023, 18:11
Im Markr kann ich der Variablen "Aktuell" aber keinen Wert aus einem Gerät oder Zählerstand zuweisen.
Das ist ja auch nicht der Sinn eines Makros, das ist lediglich eine Kette von Befehlen an ein angebundenes System. Du schickst also mit dem Makro lediglich Grafana die Anweisung einen anderen Graph anzuzeigen und wenn Du ioBroker benutzen willst, dann eben ioBroker den Befehl den Wert der Variable "Aktuell" zu aktualisieren, damit Du diesen passenden Wert angezeigt bekommst.
WRadebeul hat geschrieben:
08.10.2023, 18:11
Mein Lösungsansatz hierzu war:
im Makro für das aufrufen des PopUp auch ein CCU Programm aufzurufen, welches dann den Zählerstand oder dgl. aus dem ioBroker abruft
und in die Variable "Aktuell" schreibt, so dass diese bei Aufruf des PopUp immer den zugehörigen Wert darstellt.
Aus meiner persönlichen Sicht viel zu kompliziert gedacht und nur ziemlich umständlich und unnötig dafür überhaupt eine CCU zu bemühen. Die CCU hat doch mit dem ganzen Ablauf überhaupt nichts zu tun, diese soll Dir den Graph nicht anzeigen, das macht Grafana und die Variable hat ioBroker aktuell zu halten, dazu brauchst Du keinen Umweg über eine CCU.

Mache Dir einfach ein Makro was ein Befehl an ioBroker bzw. Grafana schickt, den Rest musst Du in ioBroker einstellen, wenn Du denn ioBroker benutzen willst.
WRadebeul hat geschrieben:
08.10.2023, 18:11
Warum das Ganze ? Ich wünsche mir 1 universelles PopUp, welches ich individuell mit Text, Werten und Grafiken bespielen kann.
Dazu brauchst Du aber immer noch keine CCU zusätzlich. Dann hast Du den Befehl an das System zu schicken, das den Graphen anzeigen soll. Die Texte müssen dann von dem System aktualisiert werden, das Du angebunden hast, also in dem Fall ioBroker.
WRadebeul hat geschrieben:
08.10.2023, 18:11
- Kann ich in Zahlen >999 ein 1.000 Punkt darstellen ?
Das hat ebenfalls das System zu liefern, von dem Du so einen Wert beziehst. NEO selber kann zur Zeit nur Nachkomma Stellen formatieren. Wenn Du Trennzeichen übergeben willst, hat dies das System zu machen, das den Wert an NEO liefert. Je nach angebunden externen System in Form eines Variablenprofils oder aber indem das externe System den Wert in das gewünschte Format umformatiert und dann eben den umformatierten Wert an NEO liefert.

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von Fonzo » 09.10.2023, 08:58

WRadebeul hat geschrieben:
08.10.2023, 18:11
Warum das Ganze ? Ich wünsche mir 1 universelles PopUp, welches ich individuell mit Text, Werten und Grafiken bespielen kann.
Das ist ja auch ein ganz normaler Wunsch, nur Dein Vorgehen ist kontraproduktiv.

Das normale Vorgehen wie vorgesehen wäre:

- ein Popup mit dem Layout erstellen, wie man das persönlich wünscht, inclusive Deinen Buttons zum Umschalten der Zeitdarstellung
- Dem Popup fest ein einziges Gerät (Chart) aus dem Gerätemanager von einem System zuweisen, das diesen Chart inclusive der notwendigen Bedienungselemente als Gerät zur Verfügung stellt
- Den Buttons eine entsprechende Aktion zuweisen, hier im Beispiel zum Einstellen der angezeigten Zeitperiode
Periode Aktion.png
- Anschließend identisch für alle Buttons in dem Popup die jeweils gewünschte Aktionen des Geräts zuweisen
- Für das normale Vorgehen brauchst Du weder Makros noch das Popup zu öffnen oder wieder zu schließen
- Das Popup öffnest Du wenn Du ein Chart anschauen willst, Änderungen erfolgen dann dynamisch im Popup selber, wenn Du den Chart nicht mehr sehen willst wird das Popup wieder geschlossen
- Um jetzt ein anderes Chart in dem gleichem Popup anzuzeigen wird einfach immer dem gleichen Popup ein neues Gerät (Chart) zugewiesen
Popup Gerät.png
- Das einzige was Du also ändern musst, ist das Gerät bei dem Button, der das Popup öffnet, der Rest bleibt gleich


Was Du hingegen vorhast, mit irgendwelchen Umwegen über eine CCU entspricht einfach nicht dem Konzept von Popups in NEO, denen ein festes Gerät zugewiesen wird und dann lediglich das Gerät variiert, das Popup bleibt aber gleich, insofern das gleiche Layout angezeigt werden soll.

Wenn Du eine zusätzliche Variable auf der CCU anlegst, dann kannst Du ja auch nicht mehr mit einem einzigen Gerät aus dem Gerätemanager auf alle Funktionen des Charts zugreifen. Ein Wechseln der Funktion des Popup mit übergeben eines Geräts funktioniert dann mit so einem komplizierten Konstrukt, wie Du Dir da bauen willst, auch nicht mehr.
Wenn Du NEO so benutzen willst, wie das normale Vorgehen laut Dokumentation wäre, dann muss auch das externe System, was den Chart (Gerät) liefert, auch ein Gerät mit Steuerungsfunktion sowie dem eigentlichen Chart zur Verfügung stellen. Das Gerät (Chart) wird dann im Gerätemanager importiert und kann dann dem Popup zugewiesen werden.

Wenn musst Du also dafür Sorge tragen, dass das System was Du benutzen willst, eben auch ein Gerät beim Geräteimport zur Verfügung stellt, was alle Funktionen zur Steuerung des Charts mitbringt. Ansonsten endet das in irgendwelchen komplizierten Konstrukten, wie Du Dir diese zur Zeit offensichtlich zurecht gebaut hast. Wenn Du ansonsten konsequent in Deinem Vorgehen bist und unbedingt eine CCU dafür benutzen willst, müsste die CCU ein vollständiges Gerät für den Geräteimport zur Verfügung stellen mit dem eigentlichen Chart und den Steuerungsfunktionen für den Chart, und nicht nur eine einzelne Variable.

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von Fonzo » 10.10.2023, 22:26

WRadebeul hat geschrieben:
08.10.2023, 18:11
wenn ich schon den NEO Spezialisten am Rohr habe:
- Kann ich in Zahlen >999 ein 1.000 Punkt darstellen ?
Wie ich schon schrieb, ist es an sich die Aufgabe des an NEO angebundenen Systems, den Wert gleich in einem passenden Format zu liefern. Wenn das benutzte System das offensichtlich nicht macht oder dazu nicht in der Lage sein sollte, kann man sich zumindest in NEO mit einem Trick behelfen.
Statt ein einfaches Element vom Typ Text zu benutzen, würde man dann eben ein Element vom Typ Webseite benutzen.

Dem Element weist man dann den Status zu und ergänzt im HTML-Gerüst folgendes:

Code: Alles auswählen

<p><span id="formattedNumber"></span></p>

<script>
  // Holt die ursprüngliche Zahl aus %neo_state%
  var originalNumber = %neo_state%;

  // Stellt sicher, dass originalNumber eine gültige Zahl ist
  if (typeof originalNumber === 'number' && !isNaN(originalNumber)) {
    // Definiert die gewünschte Anzahl der Nachkommastellen
    var decimalPlaces = 2; // Hier auf die gewünschte Anzahl ändern

    // Formatiert die Zahl mit der gewünschten Anzahl der Nachkommastellen und dem Komma als Trennzeichen
    var formattedNumber = originalNumber.toLocaleString('de-DE', {
      minimumFractionDigits: decimalPlaces,
      maximumFractionDigits: decimalPlaces,
    });

    // Zeigt die formatierte Zahl an
    document.getElementById('formattedNumber').textContent = formattedNumber;
  } else {
    // Wenn %neo_state% keine gültige Zahl ist, gib eine Fehlermeldung aus
    document.getElementById('formattedNumber').textContent = 'Ungültige Zahl';
  }
</script>
In dem Fall berechnet dann NEO selber den Wert neu bzw. formatiert diesen zur Anzeige mit Trennzeichen um. Die Schriftart und Schriftgröße müssen dann per CSS individuell zugewiesen werden.

Dieser Umweg muss aber nur gemacht werden, wenn das angebundene System selber nicht in der Lage ist, den Wert in einem passenden Format zu liefern. Der deutlich einfachere Weg ist es, ein angebundenes System zu benutzen, das den Wert gleich im passenden Format zur Verfügung stellt, dann kann man nämlich ein normales Textfeld benutzen. Das ist dann vor allem, wenn das sehr häufig genutzt werden sollte, eine deutliche Zeitersparnis, als jedes mal ein Webseitenelement zu benutzen, nur weil das angebundene System den Wert nicht im passenden gewünschten Format übergibt.

Fonzo
Beiträge: 6744
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 486 Mal

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von Fonzo » 11.10.2023, 16:55

WRadebeul hat geschrieben:
08.10.2023, 18:11
Kann ich in Zahlen >999 ein 1.000 Punkt darstellen ?
Eine solche Formatierung ist an sich eher nur bei Geldbeträgen üblich, ansonsten sollte nach deutschen Normen eher ein geschütztes Leerzeichen zu Zifferngruppierung genutzt werden.

Wenn man so was in NEO selber machen will, weil das angebundene System nicht das passende Format selber zur Verfügung stellen sollte, kann man in einem Element vom Typ Webseite folgenden Code im Hauptbereich des HTML-Gerüsts ergänzen.

Code: Alles auswählen

<p><span id="formattedNumber"></span></p>

<script>
  // Holt die ursprüngliche Zahl aus %neo_state%
  var originalNumber = %neo_state%;

  // Stellt sicher, dass originalNumber eine gültige Zahl ist
  if (typeof originalNumber === 'number' && !isNaN(originalNumber)) {
    // Definiere die gewünschte Anzahl der Nachkommastellen
    var decimalPlaces = 2; // Hier auf die gewünschte Anzahl ändern

    // Formatierungsfunktion mit benutzerdefiniertem Tausendertrennzeichen
    function formatNumber(number) {
      var parts = number.toFixed(decimalPlaces).split('.');
      parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, '\u00A0'); // Geschütztes Leerzeichen
      return parts.join(',');
    }

    // Formatieren und anzeigen
    var formattedNumber = formatNumber(originalNumber);
    document.getElementById('formattedNumber').textContent = formattedNumber;
  } else {
    // Wenn %neo_state% keine gültige Zahl ist, gib eine Fehlermeldung aus
    document.getElementById('formattedNumber').textContent = 'Ungültige Zahl';
  }
</script>
In dem Fall wird wie von deutschen Normen vorgeschlagen ein geschütztes Leerzeichen zur Zifferngruppierung und bessern Lesbarkeit bei großen Zahlen zur Anzeige in NEO benutzt.

Benutzeravatar
WRadebeul
Beiträge: 143
Registriert: 29.01.2018, 13:53
Hat sich bedankt: 2 Mal
Danksagung erhalten: 14 Mal

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von WRadebeul » 21.10.2023, 10:34

Black hat geschrieben:
08.10.2023, 14:07

Code: Alles auswählen

string stderr;
string stdout;

string url= "http://192.168.x.x:8087/getPlainValue/fullybrowser.0.192_168_x_y.Info.batteryLevel";
system.Exec("wget --timeout=13 -q -O - '"  #url # "'", &stdout, &stderr) ;  
Black
Danke Dir es hat so funktioniert und ich kann weitermachen !
Raspberrymatic, iOBroker, Homematic Classic, Homematic Homebrew, CUL 868 für Somfy Rolladen, Sonoff 3.0 ZigBee, NeoCreator zur Visualisierung, Mediola 4+ Gateway für IR, InfluxDB & Grafana

Xel66
Beiträge: 14172
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 588 Mal
Danksagung erhalten: 1501 Mal

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von Xel66 » 21.10.2023, 11:47

WRadebeul hat geschrieben:
21.10.2023, 10:34
Danke Dir es hat so funktioniert und ich kann weitermachen !
Dringend erforderlich, weiterzumachen. Ist Deine Visu mal down, hängt auch Deine CCU im Takt der Abfrage für jeweils 13 Sekunden. Es fehlt das abschießende &, um den URL-Aufruf in den Hintergrund zu packen, damit er nicht die ReGa blockiert.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Black
Beiträge: 5485
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 424 Mal
Danksagung erhalten: 1074 Mal
Kontaktdaten:

Re: CCU Skript um eine Variable im ioBroker abzufragen

Beitrag von Black » 21.10.2023, 12:05

Die 13 Sekunden waren Tippfehler... sollte eine 3 sein

Da ein Ergebnis erwartet wird, geht das mit dem & in dem Fall nicht.

Alternativ wäre noch, cuxd mit callback Funktionalität einzusetzen , dies blockiert gar nicht.

Seinerzeit hab ichvdies mal zur Abfrage einer susv beschrieben:
viewtopic.php?f=65&t=45388&hilit=Callback

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

Zurück zu „HomeMatic allgemein“