Beiträge von Ralf Stehle

    Ich benutze den telegram messenger um push-nachrichten aus meinen Shelly Plus Plug S zu senden:

    Das funktioniert soweit korrekt, aber jedesmal wird natürlich eine neue Nachricht gesendet.

    Wie kann ich aber eine schon gesendete Nachricht nachträglich ändern, z.B. wenn sich ein Messwert geändert hat?.
    Es gibt glaube ich die Funktion editMessage, wie ich diese anwende weiß ich aber nicht.


    Zunächst benötigt man sicher die message_id aus der gesendeten Nachricht. In print(response) steht die tatsächlich zur Verfügung,
    aber ich schaffe es nicht diese aus dem json response zu extrahieren :

    print(response.body.message_id)
    print(response["result"]["message_id"]);
    print(JSON.stringify(response.message_id));
    print(JSON.stringify(response["body"]["result"]["message_id"]));

    funktioneren alle nicht

    Alleine bekomme ich das leider nicht hin.

    Kann mir jemand weiterhelfen?

    Vielen Dank

    Hallo, kann mir jemand zwei Fragen zum Timer beantworten?

    - Kann man abfragen, ob ein Timer aktiviert ist? Ich benutze eine Variable, das müsste aber eigentlich kürzer gehen?

    - Was kann man mit dem letzten Parameter bewirken, der bei mir null ist. Hat jemand ein Beispiel für einen sinnvollen Gebrauch von [userdata] ?
    Timer.set(period, repeat, callback[, userdata]) -> timer_handle


    Super. Vielen Dank.:)

    Nur noch eine kleine Korrektur für andere User:

    getDay() gibt den Wochentag 0-6 zurück, daher muss man für das Datum getDate nehemn (glücklicherweise zählt wenigstens getDate von 1-31)

    getMonth() zählt leider von 0-11, daher hier noch eine 1 addieren

    Code
    let d = new Date();
    print(('0' + d.getDate()).slice(-2) + '.' + ('0' + (d.getMonth()+1)).slice(-2) + '.' + d.getFullYear() + ' ' +
        ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2) + ':' +
        ('0' + d.getSeconds()).slice(-2) + '.' + ('0' + d.getMilliseconds()).slice(-3));


    Hoffentlich wird es bald möglich sein, formatDate im Shelly-Scripting zu nutzen.
    Dann wäre es viel einfacher: let currentDate = new Date(); print(formatDate(currentDate, 'DD.MM.YYYY hh:mm:ss'));

    Das ist zwar ein alter Thread. Da ich keinen anderen passenden gefunden habe, möchte ich hier meine Script-Versuche mit dem Datum ergänzen:


    Um das Datum in europäischem Format anzuzeigen, habe ich bisher keine andere Möglichkeit gefunden als das Datum selbst zu formatieren.

    Es gibt zwar eine Methode myDate.toLocalISOString()), aber wenn man diese versucht, kommt die Fehlermeldung "Uncaught Error: Function "toLocalISOString" not found!"

    Datum kann aus dem Shelly gelesen werden:
    var myDate = new Date(Shelly.getComponentStatus("sys").unixtime * 1000);

    oder das Systemdatum benutzen:
    var myDate = newDate();

    var day = myDate.getDate();
    var month = myDate.getMonth();
    var hours = myDate.getHours()
    var minutes = myDate.getMinutes();
    var seconds = myDate.getSeconds();

    if (day < 10) { day = '0' + day; }
    if (month < 10) { month = '0' + month; }
    if (hours < 10) { hours = '0' + hours; }
    if (minutes < 10) { minutes = '0' + minutes; }
    if (seconds < 10) { seconds = '0' + seconds; }

    print (day + '.' + month + '.' + myDate.getFullYear() + ' ' + hours + ':' + minutes + ':' + seconds);


    Hier das Ergebnis meiner Versuche die Datums-Methoden zu benutzen:

    MethodeAusgabe auf der Console
    print(new Date(Shelly.getComponentStatus("sys").unixtime * 1000));Date: Sat Aug 3 2024 09:38:16 GMT+0200
    print (new Date().toUTCString());Sat, 3 Aug 2024 07:25:26 GMT 09:25:26
    print (myDate.toString());Sat Aug 3 2024 09:25:26 GMT+0200
    print (new Date().toISOString());2024-08-03T07:26:38.383Z
    print (myDate.toJSON());2024-08-03T07:26:38.383Z
    print (myDate.getIsDST());2024-08-03T07:26:38.383Z
    print (myDate.getTime());1722670141958.32983398437
    print (myDate.valueOf());1722670141958.32983398437
    print (myDate.toLocalISOString());Uncaught Error: Function "toLocalISOString" not found!

    Gelöst

    Mit dem Schaltzustand hat das nichts zu tun. Es war nur ein Programmier-Problem. Man muss den ersten Response nochmals mit JSON.parse verarbeiten.

    Hallo,

    dazu hätte ich auch eine Frage.

    Mit dem Aufruf kann ich tatsächlich die Werte eines anderen Shellys über die IP abrufen.

    Code
    Shelly.call('http.get',{url:'http://192.168.xxx.xxx/rpc/switch.getstatus?id=0'},
       function (response, error_code, error_message, ud) {
               print(JSON.stringify(response));
               print(response['body']);
       }
    );

    Wie komme ich aber an die untergeordneten Werte in dem Json-Array?
    Diese beiden Aufrufe funktionieren jedenfalls nicht

    Code
    print(response['body']['apower'])  
    print(response['body']['.']['apower']) 
    print(response['body']) 

    Bei Aufruf nur des Body in der 3. Zeile bekomme ich wenigstens ein Ergebnis:

    "{\"id\":0, \"source\":\"http\", \"output\":true, \"apower\":0.0, \"voltage\":232.2, \"current\":0.000, \"aenergy\":{\"total\":0 17:33:18

    .000,\"by_minute\":[0.000,0.000,0.000],\"minute_ts\":1722439980},\"temperature\":{\"tC\":43.7, \"tF\":110.7}}"

    Wie ich das weiter auswerte, ist mir ein Rätsel - oder muss ich das mit String-Methoden von Javascript selbst parsen?

    Hallo, hier kommt die Fortsetzung.

    Jetzt habe ich einen Magnetschalter mit IN2 + GND verbunden, um den Öffnungszustand des Garagentores zu überwachen.

    IN1 oder IN2 schalten direkt den Output(0) bzw. Output(1) an oder aus ohne weitere Einstellungen in der App/Cloud

    Zuvor hatte ich in den Einstellungen des Shelly Plus Uni vergeblich geschaut, wie ich IN1 oder IN2 einstellen muss,
    da der Counter ja ein eigenes Menü hat. Ich habe auch erfolglos versucht den Magnetschalter bei den Peripherie-Geräten zu finden.
    Das ist alles nicht nötig.


    Das Garagentor wird bei mir durch Output(0) geschaltet.
    Output(1) hat keine Schalt-Funktion.

    Den Magnetschalter habe ich daher mit IN2 gegen GND verbunden, da er ja nicht schalten soll, sondern den Öffnungszustand des Garagentors anzeigen soll.
    Der Zustand des Garagentors lässt sich jetzt durch den Schalterzustand von Output(1) ablesen.


    Wenn der Magentschalter on oder off ist, kann man jetzt per Script darauf reagieren:

    1. Beispiel: per Timer das Garagentor wieder automatisch schließen.
    2. Beispiel: per Timer eine Message über Telegram sendet: "Achtung, das Garagentor ist noch offen"
    3. Beispiel: das Garagentor soll mit dem Shelly nur geöffnet oder geschlossen werden können. Der Shelly-Schalter wird daher je nach Zustand deaktiviert.


    Code für Beispiel 2:

    Hallo,

    die bisherigen Beiträge schildern eher Probleme bei der Steuerung eines Hörmann Garagentor-Antriebes mit Shelly-Komponenten.
    Daher möchte ich hier mal kurz eine positive Erfahrung mitteilen:

    Die Shelly Plus Uni Platine kann problemlos mit der Promatic 4 verbunden werden, da sie mit 9-28 V Gleichstrom betrieben werden kann und zwei potentialfreie Ausgänge (SSD-Relais) hat,
    um den Schaltkontakt für das Tor zu schließen.
    ACHTUNG: Shelly Plus Uni (Gen. 2) nicht mit der älteren Shelly Uni (Gen. 1 ohne Plus) verwechseln.

    Die Anschlüsse für externe Schalter liegen im Promatic-Gehäuse unter einer kleinen Klappe an der schmalen Gehäuse-Seite. Man braucht also nicht einmal etwas aufschrauben.
    Unter dieser Klappe ist auch genug Platz um die Shelly Platine sicher unterzubringen, ein Befestigen ist nicht nötig, ich habe lediglich die Kontakte der Platine isoliert und vor Kurzschluss gesichert.

    Die Promatic 4 reagiert auf einen kurzen Schaltkontakt (Tasterfunktion). Die Art des Schaltvorganges lässt sich in der Shelly App einstellen. Ich habe einfach eingestellt, dass 1 Sekunde nach dem Einschalten wieder ausgeschaltet wird - so bleibt die Tasterfunktion auf alle Fälle immer bereit.

    Shelly Plus Uni --> Promatic 4

    Pin 1 (VAC1) --> Pin 5 (24 V)
    Pin 2 (VAC2) --> Pin 20 (0 V)
    Out 1 --> Pin 21 (Signal Kanal 1)
    Out 1 --> Pin 20 (0 V)

    Out1: Die Polung ist egal. Out 1 und Out 2 sind potentialfreie SSD-Relais ohne Spannung

    (die Spannungs- und Stromangabe von Out 1 und 2 geben nur die maximale Belastbarkeit an, wenn der externe Kontakt nicht spannungsfrei ist.
    Ob auf Pin21 der Promatic eine Spannung anliegt, habe ich nicht gemessen. Wenn dann bestimmt nicht mehr als 24V)

    Die Klemme vom Promatic 4 lässt sich abziehen (siehe unten Bild 12), das ist sehr praktisch. Das Verdrahten mit dem Shelly kann daher bequem am Schreibtisch gemacht werden

    Pin 23 der Promatic habe ich auch ausprobiert, da wird das Garagentor aber nur extrem langsam ca. 20 cm weit bewegt.


    Shelly Plus Uni - Schaltplan:

    Shelly Plus Uni-Schaltplan.jpg


    Hörmann Promatic 4:

    Hörmann Promatic 4.jpg


    P.S. aktuell bekomme ich noch keine Rückmeldung, ob das Garagentor offen oder verschlossen ist.
    Es gibt von Hörmann dafür eine Erweiterungsplatine Hörmann Universaladapterplatine UAP 1 HCP
    Diese kostet aber 75,- € und ob der Shelly Plus Uni anschließbar ist, weiß ich auch nicht.
    Ich werde daher erst einmal versuchen, einen Magnetkontaktschalter an IN1 oder IN2 des Shelly anzuschließen.
    Wenn das funktioniert, berichte ich nochmal

    Ich habe herausgefunden, dass die Trigger schon beim Anlegen der Geräte eingestellt werden müssen.

    An- und Ausschalten erledige ich jetzt mit einem Javascript, das sich selbst beendet:


    Leider wird der Geräte-Status On oder Off aber nicht korrekt angezeigt.
    Ich habe unter Datenpunkt (Anzeige) ....Switch:0-Status eingegeben, da kommen aber alle aktuellen Daten zurück, nicht nur Output:true oder false


    gerät.jpg

    Das Resultat sieht dann so aus:


    Screenshot.jpg

    Hallo,

    ich benötige Starthilfe für ioBroker mit Jarvis. Bin leider totaler Anfänger.

    Als Visualisierung konnte ich nur Jarvis auswählen. Für Vis habe ich keine kostenlose Lizenz gefunden und iQontrol will einfach nicht laufen.

    Ich habe es geschafft die Shelly-Geräte und Ecoflow Solaranlage mit ioBroker zu verbinden und als Gerät in die Visualisierung Jarvis einzubinden.

    Die Anzeige zum An- und Ausschalten wird schon mal angezeigt. Aber es wird kein Befehl zum An- und Ausschalten übertragen.

    Die Temperatur-Anzeige funktioniert auch noch nicht, obwohl im ioBroker alle Datenpunkte verbunden sind.

    Hier mein erstes Widget. Wenn man auf das Schalter-Symbol klickt, ändert sich das Aussehen, aber mein Shelly wird nicht geschaltet.

    Die Temperatur wird leider auch nicht angezeigt


    Jarvis.jpg


    In den ioBroker-Objekten werden alle Werte korrekt angezeigt.

    Die Temperatur hat z.B. den Datenpunkt: shelly.0.shellyplus2pm#xxxxxxx#1.Ext.temperature101C


    So habe ich das im Widget versucht:


    Geräte.jpg


    Für eure Hilfe bin ich dankbar

    Bei mir war das Problem die fehlende Eingabe der GATEWAY und DNS-Werte

    Zuerst konnte ich drei Shelly Plus Plug S in der Shelly App problemlos zur Cloud hinzufügen.
    Leider wurden keine Verbrauchsdaten gespeichert und immer wieder waren die PlugS offline.

    Nach Entfernen und Neu Hinzufügen funktionierte die Einrichtung der Plug S dann nicht mehr,
    sie blieben einfach Offline, manchmal auch mit der Anzeige "Ausstehende Verbindung" .

    Ich habe mehrmals alles neu eingegeben. Einen neuen Shelly-Account eingerichtet. Fritz!Box neu gestartet. In der Fritz!Box alle WLAN-Einträge der Shellys gelöscht - alles ohne nachhaltigen Erfolg.

    Jetzt habe ich endlich mal Werte für Gateway und DNS eingegeben: das ist wohl in der Regel einfach die IP des Routers (meiner Fritz!Box).
    Seither scheint die Verbindung stabil zu funktionieren !

    Auf Gateway und DNS wurde auch andernorts im Forum hingewiesen. Da anfangs alles funktionierte und bei der Eingabe keine Fehlermeldung kam, dachte ich mir nichts dabei, das freizulassen.

    smarthome-forum.eu/attachment/54156/

    Shelly Debug App.jpg
    Vielen Dank für eure Hilfe. Die Debug-App habe ich nicht gekannt, wird in der Anleitung nicht erwähnt.

    Ich hatte genau dasselbe Problem: Erstes Koppeln hat funktioniert. Firmware-Update aufgespielt und danach war keine Reaktion mehr vom Button zu bekommen. Vielleicht lag es an der fast leeren mitgelieferten Batterie (2,8 V). Aber auch nach Einlegen einer neuen Batterie: keine Reaktion, kein Piepton beim Drücken der Taste, im Smartphone erschien als Bluetooth-Device "OTA", das konnte ich nicht koppeln.

    Mit der Shelly debug app konnte ich den Blu Button wie beschrieben koppeln
    und das Firmware-Update aufspielen.

    Danach war es kein Problem, den Button in der normalen App zu verbinden und einzurichten.

    Ich habe in

    Convert a Unix timestamp to time in JavaScript
    I am storing time in a MySQL database as a Unix timestamp and that gets sent to some JavaScript code. How would I get just the time out of it? For example, in…
    stackoverflow.com

    noch folgende Möglichkeit recht übersichtliche Funktion gefunden: