Dafür gibt es bei dem Alexa-Modul die Favoriten Playlist
Ich müsste das irgendwie an eine Integervariabel senden, welche aktuell so ausschaut.
Naja, ist ja fast perfekt! Außer das bei openHASP alles 0 based ist, also -1
Ich habe eine Seite erstellt, wo ich die letzten zwei Bilder der Webcam sehe.
Da ich keine Möglichkeit gefunden habe, diese extern (Webseite oder media-Ordner) zu holen, lade ich diese per Script auf den ftp des Display hoch.
Feststellung 1: Während dem Upload flackert das Display.
Die Bilder werden nicht automatisch aktualisiert, daher mach ich dies mit einem Ablaufplan alle par Minuten über das Modul (Aktion, Seite neu laden).
Feststellung 2: Danach funktioniert der Roller für die Playlist nicht mehr, daher werden die Befehle nicht mehr gesendet. Erst nach einem Neustart funktioniert das wieder.
Kennt jemand das Problem oder am besten eine Elegantere Methode, an die Bilder zu gelangen?
Der Post wäre besser hier aufgehoben gewesen Hervorragendes und günstiges Mini Touch Display
Bekannt und ist beim Hochladen oder Speichern der pages.jsonl auch so. Genau wie beim Screenshot machen …
Meine ganz persönliche Meinung zu Punkt 2: dafür ist das Display - noch openHASP gemacht/gedacht!
Gruß HEiko
Nicht gedacht, aber funktioniert…
Upload des PNG über FTP per Script
Am Schluss des Scripts:
WWXRD_SendJSONL(32211, ['page' => 2,'id' => 11,'obj' => 'img','src' => "L:/$ftpFileName"]);
und das Bild ist aktuell…
Super, mit deinem Modul holen wir das letzte aus dem Display raus
Ich benötige Hilfe bei einem Problem, das ich trotz vieler Mühen einfach nicht selbst hinbekomme.
Ich setze das Sonos-Modul ein. Playlisten importieren geht dank TuneIn (New) nicht mehr (soweit ich das verstnaden habe). Damit kann ich aber leben. Ich habe daher drei Radiosender „händisch“ in den Sonos-Splitter gepackt. Das funktioniert auch.
Im Webfront sieht das auch gut aus.
Ich möchte nun gerne das Layout von @pitti für das Wanddisplay nutzen und auf der Seite 4, ID 91 (der Roller) die drei Sender in dem Roller angezeigt bekommen. Was auch immer ich mache, der Roller zeigt nur die in der JSONL vorbelegten Daten an, nicht die Daten aus meiner Variable.
Alles andere an der Sonos Steuerung läuft, auch der Play / Pause Button.
Kann mich bitte jemand „erleuchten“? Danke!
Habe eine Seite für die Wärmepumpe zusammengeschustert…
Seitenaufbau sieht so aus
{"comment": " ---------------------- Page 05 - HEIZUNG -------------------------- "}
{"page": 5, "id": 4, "obj": "img", "src": "L:/bg30.png", "auto_size": 0, "w": 480}
{"comment": " --- Navi Buttons .---- "}
{"page": 5, "id": 5, "obj": "btn", "x": 5, "y": 42, "w": 150, "h": 48, "action": {"down": "page prev"}, "bg_opa": 30, "bg_color": "#FFFFFF", "border_side": 0, "text": "\uE04D", "text_color": "#FFFFFF", "text_font": 32, "radius": 10}
{"page": 5, "id": 6, "obj": "btn", "x": 165, "y": 42, "w": 150, "h": 48, "action": {"down": "page back"}, "bg_opa": 30, "bg_color": "#FFFFFF", "border_side": 0, "text": "\uE2DC", "text_color": "#FFFFFF", "text_font": 32, "radius": 10}
{"page": 5, "id": 7, "obj": "btn", "x": 325, "y": 42, "w": 150, "h": 48, "action": {"down": "page next"}, "bg_opa": 30, "bg_color": "#FFFFFF", "border_side": 0, "text": "\uE054", "text_color": "#FFFFFF", "text_font": 32, "radius": 10}
{"comment":" --- Wärmepumpe --------------- "}
{"page": 5, "id": 10, "obj": "img", "x": 10, "y": 110,"auto_size":0,"w": 200, "h": 200, "src": "L:/WP_Off.png"}
{"page": 5, "id": 21, "obj": "label", "x": 230, "y": 115, "w": 240, "h": 25, "align": "left", "text": "Vorlauf: 45°C", "text_color": "#FFFFFF", "text_font": 22}
{"page": 5, "id": 22, "obj": "label", "x": 230, "y": 155, "w": 240, "h": 25, "align": "left", "text": "Rücklauf: 30°C", "text_color": "#FFFFFF", "text_font": 22}
{"page": 5, "id": 23, "obj": "label", "x": 230, "y": 195, "w": 240, "h": 25, "align": "left", "text": "Rücklauf Soll: 35°C", "text_color": "#FFFFFF", "text_font": 22}
{"page": 5, "id": 24, "obj": "label", "x": 230, "y": 235, "w": 240, "h": 25, "align": "left", "text": "Warmwasser: 50°C", "text_color": "#FFFFFF", "text_font": 22}
{"page": 5, "id": 25, "obj": "label", "x": 230, "y": 275, "w": 240, "h": 25, "align": "left", "text": "COP-Faktor: 3.9", "text_color": "#FFFFFF", "text_font": 22}
{"comment":" --- Temperaturkorrektur --------------- "}
{"page": 5, "id": 30, "obj": "slider", "x": 10, "y": 320, "w": 360, "h": 35, "min": 30, "max": 65, "val": 50,"radius":20,"bg_opa10":25,"bg_color10":"#FFFFFF","bg_grad_color10":"#C0F0C0","border_side":0,"radius20":40,"bg_grad_dir20":0,"bg_color20":"#FFFFFF","pad_top":0,"pad_bottom":0,"pad_left":0,"pad_right":0,"bg_opa":70,"border_side10":0}
{"page": 5, "id": 31, "obj": "label", "x": 380, "y": 320, "w": 100, "h": 35, "align": "center", "text": "50°C", "text_color": "#FFFFFF", "text_font": 30}
{"page": 5, "id": 32, "obj": "label", "x": 10, "y": 360, "w": 360, "h": 25, "align": "center", "text": "Warmwasser-Soll", "text_color": "#FFFFFF", "text_font": 22}
{"page": 5, "id": 40, "obj": "slider", "x": 10, "y": 405, "w": 360, "h": 35, "min": -5, "max": 5, "val": 0, "radius":20,"bg_opa10":25,"bg_color10":"#FFFFFF","bg_grad_color10":"#C0F0C0","border_side":0,"radius20":40,"bg_grad_dir20":0,"bg_color20":"#FFFFFF","pad_top":0,"pad_bottom":0,"pad_left":0,"pad_right":0,"bg_opa":70,"border_side10":0}
{"page": 5, "id": 41, "obj": "label", "x": 380, "y": 405, "w": 100, "h": 35, "align": "center", "text": "0°C", "text_color": "#FFFFFF", "text_font": 30}
{"page": 5, "id": 42, "obj": "label", "x": 10, "y": 445, "w": 360, "h": 25, "align": "center", "text": "Temperatur-Korrektur", "text_color": "#FFFFFF", "text_font": 22}
Mit diesem Script werden die Bilder anhand der Integer-Statusvariable der Wärmepumpe gewechselt
<?php
// ID der Integervariable
$variableID = 16696; // Hier die richtige ID der Integervariable eintragen
// Aktuellen Wert der Integervariable auslesen
$status = GetValueInteger($variableID);
// Ziel-ID für WWXRD_SendJSONL
$targetID = 32211;
// JSON-Befehle basierend auf dem Status senden
switch ($status) {
case 0: // Heating
WWXRD_SendJSONL($targetID, [
'page' => 5,
'id' => 10,
'obj' => 'img',
'x' => 10,
'y' => 110,
'auto_size' => 0,
'w' => 200,
'h' => 200,
'src' => "L:/WP_Heating.png"
]);
break;
case 1: // HotWater
WWXRD_SendJSONL($targetID, [
'page' => 5,
'id' => 10,
'obj' => 'img',
'x' => 10,
'y' => 110,
'auto_size' => 0,
'w' => 200,
'h' => 200,
'src' => "L:/WP_HotWater.png"
]);
break;
case 5: // Off
WWXRD_SendJSONL($targetID, [
'page' => 5,
'id' => 10,
'obj' => 'img',
'x' => 10,
'y' => 110,
'auto_size' => 0,
'w' => 200,
'h' => 200,
'src' => "L:/WP_Off.png"
]);
break;
case 7: // Cooling
WWXRD_SendJSONL($targetID, [
'page' => 5,
'id' => 10,
'obj' => 'img',
'x' => 10,
'y' => 110,
'auto_size' => 0,
'w' => 200,
'h' => 200,
'src' => "L:/WP_Cooling.png"
]);
break;
default: // Falls kein gültiger Wert
echo "Unbekannter Status: $status";
break;
}
Und hier die Bilder, die dazu per FTP auf Display geladen werden müssen, um sie später mit dem Script abzurufen.
WP.zip (177,3 KB)
@pitti gerne zur Integration, natürlich auch in modifizierter Form, in deinen publizierten Seitenaufbau.
Danke, das habe ich schon früher gelesen und versucht. Leider ohne Erfolg.
Du musst den Seitenaufbau auch anpassen
{"comment":" --- Favorites -------- "}
{"page":4,"id":91,"obj":"roller","x":315,"y":130,"w":150,"rows":7,"options":"Italo Dance\nBest of Mundart\nAntenne Bayern\nRadio Aargovia\nRadio Pilatus\nRadio SRF1\nRadio SRF3\nVintage Radio","mode":1,"radius":10,"border_side":0,"text_font":24,"bg_color":"#FFFFFF","bg_opa":30,"bg_opa1":150,"align": "center"}
Und sonst die Wiedergabelisten verwenden, damit mach ichs und das funktioniert einwandfrei…
Super, ich baue gerade Wettersymbole in das 7" Display ein und Die von Openweather sind mir zu klein. Dein Script gibt mir ein Denkanstoß, DANKE.
Du kannst die Namen der Playlisten nicht dynamisch syncen, d.h. die Namen müssen händisch in die jsonl eingetragen werden.
Wenn die Namen dann im Display und IPS übereinstimmen, dann weiß man anhand des Indexwertes was man hören möchte.
Gruß Heiko
Wenn ich die unbekannte Objekte löschen möchte führt das zu einer leeren Liste der Objektzuordnung, alles was zugeordnet ist verschwindet.
Ich habe mal Debug aufgezeichnet, wärend ich den ‚Einlesen‘ Button (inkl. Löschen) drücke und berstätige
dump.txt (129,3 KB)
Ahh, Danke - kann es nachstellen! Da gehe ich mal auf die Suche
Gruß HEiko
PS: Fehler gefunden - kommt mit nächster Beta!
ChatGPT hat das auch schön erklärt
Warum passiert das?
- In PHP bleibt die numerische Indexierung nach einem
unset()
erhalten. json_encode()
behandelt Arrays, bei denen die Indizes nicht lückenlos aufeinanderfolgen, als assoziatives Array (also als Objekt im JSON-Format mit numerischen Keys).
Wenn die Indizes lückenlos sind ([0, 1, 2]
), erzeugtjson_encode()
ein JSON-Array ([...]
).- Wenn die Indizes jedoch Lücken aufweisen (
[0, 2]
), wird daraus ein JSON-Objekt ({ "0": ..., "2": ... }
).*
Wie behebe ich das?
unset()
hinterlässt Lücken in numerischen Arrays.json_encode()
erkennt diese Lücken und wandelt das Array in ein Objekt um.- Mit
array_values()
kannst du die Indizes neu ordnen, um ein sauberes JSON-Array zu erhalten.
Dank @mb-stern konnte ich den Fehler finden (siehe Post vorher) und fixen. Da ich immer ungern für einen Fix eine neue Version mache gibt es wieder mal eine kleine Zugabe
Danke an @Spoosie für die Anregung zu der Idee mit dem Durchblättern!
BETA v3.4.20250303 ist online:
- NEU: Auswahl der zu aktivierenden Seite im Leerlauf (erw. Einstellungen)
- NEU: Automatisches Durchblättern der Seiten im Leerlauf (erw. Einstellungen)
- FIX: Bei Aktivierung der Löschfunktion beim Einlesen des Seitenlayouts wurden alle Zurodnungen gelöscht
Gruß HEiko
Hiho,
wenn alle Tests erfolgreich verlaufen, erwartet Euch morgen eine neue Beta-Version.
Und um die Spannung ein wenig zu steigern … ich sage nur …
- selektives Blättern
- formatierte Werte
… mehr verrate ich noch nicht!
Gruß Heiko