Lange Zeit im Bereich IT als Systemadministrator und später als IT-Leiter gearbeitet, aber jetzt als Rentner im wohlverdienten Ruhestand. :-)
SmartHome und IoBroker sind einfach nur ein tolles Hobby, dem ich mich jeden Tag aufs neue, mit Begeisterung widme.
Am meisten Spaß macht mir Blockly und irgendwann werde ich es auch wirklich begreifen. Das heißt, das ich viele Blocklys gebaut habe, aber viele davon bestimmt zu umständlich sind, aber sie funktionieren. Ich lerne ja auch jeden Tag dazu.
Moin, ich hatte gestern eine ähnliche Situation und da fiel mir das Video von Matthias Kleine wieder ein. Sieh es dir mal an, schätze das du dein Problem dann lösen kannst. Zeitdifferenzen formatieren im ioBroker: https://www.youtube.com/watch?v=sxkz3O6nfFQ&t=407s
@dslraser
Die Fehlermeldung kam auch nur, wenn man das Blockly zum Bearbeiten öffnen wollte. Nach dem Öffnen einmal irgendwas im Blockly anklicken und man musste speichern, obwohl man nichts geändert hatte. Das liegt aber an irgendeinem Update und war bei allen meinen Blocklys der Fall.
Ich habe jetzt gerade die VM mal neu gestartet und im Moment ist es wieder schneller, so 20 bis 30 Sekunden. Das sind ja richtig "große" (Export 38.725 Zeilen) Blocklys und die muss ich auch nicht regelmäßig anpassen, also passt das schon mit der Zeit.
Wenn ich per Telegram "Fenster" an den IOB schicke, kommt sofort die Antwort und das ist das Wichtigste. Es funktioniert also wie gewünscht.
@xenon Das sieht schon besser aus. Die Messenger Einstellungen wurden richtig erkannt und ich kann die einzelnen Messenger auch konfigurieren.
Bei meinem Testalias Datenpunkt wurde die Konfiguration beibehalten und ich kann die Benachrichtigung auswählen.
Ich kann allerdings keine Testnachricht versenden. Habe Alexa und Telegram getestet. Oder geht das noch nicht?
Okay, noch mal den IoBroker beendet. Wieder mit GParted gestartet um die Swap zu löschen und dann zu erweitern und diesmal wird mir das angezeigt:
Ich habe keinen blassen Schimmer, warum die Swap nun am Ende liegt, aber so konnte ich jetzt die sda1 vergrößern.
Wenn ich nicht vorher einen Screenshot gemacht hätte, würde ich es nicht glauben. Finde das echt merkwürdig.
ist alles gut. Die Datensätze werden sortiert und in den neuen Datenpunkt geschrieben.
Dann habe ich die Datensätze durch die Variable ersetzt:
const sourceObject = 'device-watcher.0.devices.hmrpc.listAll';
const targetObject = '0_userdata.0.Datenpunkte_VIS.HM_ListAll_Sortiert';
// JSON-Objekt mit den Geräteinformationen
const deviceListe = JSON.parse(getState(sourceObject).val);
// Nach dem "Device"-Namen sortieren
deviceListe.sort((a, b) => {
const deviceA = a.Device.toUpperCase();
const deviceB = b.Device.toUpperCase();
if (deviceA < deviceB) {
return -1;
}
if (deviceA > deviceB) {
return 1;
}
return 0;
});
// Sortierte Geräteliste in das Zielobjekt schreiben
setState(targetObject, JSON.stringify(deviceListe));
console.log('Sortierte Geräteliste wurde in ' + targetObject + ' geschrieben.');
Da bekomme ich Fehler zurück, also das Script angepasst und Fehler ausspucken lassen.
Dann bekomme ich den Fehler zurück, das er das nicht parsen kann.
const sourceObject = 'device-watcher.0.devices.hmrpc.listAll';
const targetObject = '0_userdata.0.Datenpunkte_VIS.HM_ListAll_Sortiert';
// JSON-Objekt mit den Geräteinformationen
let deviceListe;
try {
deviceListe = JSON.parse(getState(objectName).val);
} catch (error) {
console.error('Fehler beim Parsen des JSON-Objekts:', error);
return;
}
// Nach dem "Device"-Namen sortieren
deviceListe.sort((a, b) => {
const deviceA = a.Device.toUpperCase();
const deviceB = b.Device.toUpperCase();
if (deviceA < deviceB) {
return -1;
}
if (deviceA > deviceB) {
return 1;
}
return 0;
});
// Sortierte Geräteliste in das Zielobjekt schreiben
setState(targetObject, JSON.stringify(deviceListe));
console.log('Sortierte Geräteliste wurde in ' + targetObject + ' geschrieben.');
Fehlermeldung:
06:14:32.944 error javascript.0 (2196) script.js.Test_Scripte.HM_Script_sortieren_3: Fehler beim Parsen des JSON-Objekts:
06:14:32.944 info javascript.0 (2196) script.js.Test_Scripte.HM_Script_sortieren_3: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
06:14:54.361 info javascript.0 (2196) Stop script script.js.Test_Scripte.HM_Script_sortieren_3
Wie schon gesagt, ich hab keine Ahnung vom Srcipten und alles was ich gemacht habe, ist aus dem Netz. Laut Netzt soll ich überprüfen ob das zu lesende Objekt ein gültiges JSON Format ist. Aus meiner Sicht ist das so, aber ich hab keine Ahnung wie ich das jetzt prüfen soll und wo ich suchen soll
Hattest recht, jetzt ist Ruhe. Der Datenpunkt wird korrekt mit Semikolon gesetzt und es gibt nur einen Eintrag je Debug Block. Irgendwie sieht das Blockly jetzt auch logischer aus. Im Nachhinein, klar, die Blöcke hatten ja in der Schleife nix zu suchen...
@ofbeqnpolkkl6mby5e13
Deine Idee sieht sehr gut aus. Habe zum Testen ein kleines Blockly mit einer Funktion erstellt und darüber kann ich den Alias ändern. Das funktioniert schon mal. Jetzt werde ich morgen mal testen, ob das auch in der View den State des Widgets ändert, also ob mir angezeigt wird der DP an oder aus ist. Wenn das auch noch klappt, dann wäre das genial
Ja, auf beiden läuft jeweils eine Instanz von hm-rega und jeweils 4 Instanzen hm-rpc. Meiner CCU3 juckt das nicht.
Mich wundert es, das deine da Probleme macht.
Moin, wenn es nur um die CCU geht, sehe ich da eigentlich kein Problem. Ich habe auch ein Produktiv und ein Testsystem und beide sind identisch und gleichzeitig mit meiner CCU3 verbunden. Ich frage wegen der Scripte die CCU3 immer von beiden Systemen aus ab, schalte allerdings selten über beide parallel.
Wie schon erwähnt, würde ich auch von den ganzen HM Geräten Aliasse anlegen und dann nach und nach das System neu aufbauen. Wenn du dann aktiv testen willst, reicht es ja auch die HM Instanzen auf dem alten System zu deaktivieren, dann kann dir da nichts dazwischenfunken.
Da wir morgen für ein paar Tage in Urlaub fahren, muss ich mir also angewöhnen, immer wieder mal die App zu starten und auch offen lassen, damit mein iPhone lernt, die Daten zu senden. Sehe ich das so richtig?
Ich nehme ja mein Notebook mit, werde dann mal zwischendurch nachsehen, ob sich die Datenpunkte ändern. Schauen wir mal, ob sich da etwas an der Häufigkeit tut.
Ja, Batteriesparmodus ist aus und Standortzugriff erlaubt. Vor dem Wechsel auf Cellular und zurück auf WiFi, wurde die korrekte SSID im Datenpunkt angezeigt. Habe jetzt gerade um 15:20 wieder die App gestartet und jetzt ist die SSID wieder drin.
Hab mir schon gedacht das IOS da macht was es will, und nicht unbedingt das was Entwickler wollen.
Du wolltest ja Rückmeldungen zu der "Background synchronization" haben.
Mit IoT 3.3.0 bekomme ich jetzt die Infos, allerdings nicht automatisch im Hintergrund. Beim ersten Test habe ich die App beendet und etwa 2 Stunden nichts gemacht, die Daten wurden nicht aktualisiert.
Danach habe ich nur die App im Hintergrund laufen lassen, aber auch dann wurden die Daten erst aktualisiert, nachdem ich die App wieder aktiv nach vorne geholt habe. Selbst einen Wechsel von WiFi auf Cellular, oder umgekehrt, wird nur dann angezeigt, wenn ich die App nutze.
Beim zurück auf WiFi und dann erneut die App aufrufen, bleibt der Wert von "ssid" auf "(null)" stehen. Der Zeitstempel der letzten Änderung ändert sich auf die aktuelle Zeit, aber der Wert halt nicht, also die SSID wird nicht übertragen.
Wenn ich helfen kann, sag Bescheid.
Nochmal zur Info: iPhone 15 aktuellste IOS Version, App 1.20 und IoT 3.3.0.
ich habe gerade im IoT Blog gesehen, das eigentlich unterhalb von "iot.0.app" der Ordner "devices" auftauchen sollte, das ist bei mir nicht der Fall, GeoFence funktioniert dagegen sauber.
Ich habe ein iPhone (aktuellste IOS Version), die App Version ist die 1.2.0 und IoT Version 3.2.2. Benachrichtigungen auf dem iPhone sind alle freigeben.
Muss ich noch etwas anderes beachten, oder was kann ich tun, damit die Daten synchronisiert werden?
Okay, dann bin ich leider raus, habe keine Ahnung vom Programmieren. Ich verstehe manche Abschnitte in einem Skript, könnte aber nicht sagen ob das richtig oder falsch ist. Dann musst du doch auf MCU warten, das er eventuell noch mal drüber schaut.
Lief das Script in der alten Version, oder hast du es ganz neu gemacht?
Hast du die aktuelle Version vom TR064 installiert? Bei mir ist es die 4.3.0. JavaScript habe ich die 8.4.2 im Einsatz dann brauchst du bei JavaScript das NPM Modul "xml2js".
Node.js habe ich v20.13.1 und NPM 10.5.2
So ganz habe ich deinen Post auch nicht verstanden. Du hattest Fehlermeldungen und jetzt läuft es?
Moin, ich habe auch das neue Skript von @MCU genommen und ich habe keinerlei Fehler. Das Abfragen des AB funktioniert, der JSON Datenpunkt wird sauber erstellt und ich habe gerade das Löschen einzelner Anrufe erfolgreich getestet.
Das einzige was ich noch ändern muss ist meine VIS, wegen dem alten Skript lagen die Daten noch unter "javascript.0.Telefon.Anrufbeantworter" und jetzt eben unter "0_userdata.0.Telefon.Anrufbeantworter". Das hatte mich schon länger gestört, war nur zu faul es zu ändern.