Beiträge von AAAAAA

    Ein Shelly 2PM Gen3 steuert bei mir im Cover-Modus erfolgreich ein Ventil. Die beiden Taster-/Schalter-Eingänge brauche ich für das Ventil nicht, sondern wollte sie zur Anzeige von Schalter-Status verwenden. Konfigurationsseitig habe dazu ich unter "Cover Settings/Cover input settings" den Input-Type auf "Switch" sowie "Control button mode" auf "Detached" gesetzt. Physisch geht eine Phase L zu jedem Schalter, von diesem aus zum Shelly auf S1 resp. S2 sowie ein paar Verbrauchern. Der Shelly hängt an der gleichen Phase L wie die Schalter sowie am gleichen Neutralleiter N wie die über die Schalter geschalteteten Verbraucher. Ich hätte jetzt im Log und in Home Assistant den Zustand der Schalter erwartet, aber die bleiben immer auf "ON". Ignoriert der Shelly die Schalter bei "Detached" völlig und berichtet ihren Status nicht?

    Ich würde zu ja tendieren. Das mit den Schreibzyklen würde ich mich getrauen. Ob die KVS-Werte genügend "schön" in der Cloud dargestellt werden können, entzieht sich meiner Kenntnis; da wären virtuelle Komponenten natürlich schöner.

    Dann kommt es wohl auf die Anzahl Schaltvorgänge drauf an und ob die Shellys die KVS immer an die gleiche Speicherstelle schreiben. Bei wenigen Schaltvorgängen pro Tag wäre das wohl unproblematisch. Speichern würde ich zwei Dinge: Ein KVS-Eintrag für den Unix-Timestamp des letzten Einschaltvorganges und einer für das Total in Sekunden. Mit virtuellen Komponenten hätte man dann gleich noch ein UI für den Totalwert, aber KVS ist auch schon was. Immer beim Ausschalten entsprechend den Wert "aktueller Timestamp - gespeicherter Timestamp" zum Total dazuzählen. Wer mag kann auch noch spontane Rebootvorgänge und dergleichen behandeln, aber grob sollte das hinkommen.

    Das Shelly Plus 1 unterstützt weder virtuelle Komponenten noch den Key-Value-Store KVS, oder? Ohne sich was speichern zu können, wird es auf dem Device selber schwierig. Was die Cloud von Shelly bietet, weiss ich nicht, vielleicht kann man da über das Schalt-Log was rechnen.

    [EN] What would you like to achieve? The shelly can be called via REST or itself call a REST endpoint on certain events, it can run scripts, it's possible to push schedules to the device etc.

    [DE] Was möchtest du erreichen? Der Shelly kann über REST gesteuert werden, er kann selber REST-Calls absetzen bei Ereignissen, er kann Skripte ausführen und man kann u.A. Dinge zu gewissen Zeiten ausführen lassen.

    Im Moment stehe ich grad auf dem Schlauch, wie ich aus einem String, welcher gemäß Shelly-API-Doc einfach ein Byte-Array ist, Integers (oder Numbers) kriege. Die üblichen verdächtigen JS-Funktionen auf String scheinen dafür zu fehlen. Was geht, ist eine HEX-Darstellung zu kriegen:

    Code
    function init() {
    	let testString="\x00190aZ\xFF"
    	for(i=0;i<testString.length;i++) {
    		let char = testString.charAt(i);
    		let num = btoh(char);
    		print("Character: '"+char+"' Number: '"+num+"'");
    	}
    }
    init();

    Das ergibt:

    Code
    Character: '' Number: '00'
    Character: '1' Number: '31'
    Character: '9' Number: '39'
    Character: '0' Number: '30'	
    Character: 'a' Number: '61'
    Character: 'Z' Number: '5a'
    Character: '�' Number: 'ff'

    Das ist schon mal nicht schlecht, aber ich will ja gar keine HEX-String-Repräsentationen von meinen Zahlen, sondern echte JS-"Number"-Instanzen. Eine Funktion 'btoi' oder 'bton' oder dergleichen, welche eine Number als Rückgabewert hat. Aktuell bleibt alles immer ein String.

    Und wie ich das nun geschrieben habe, ist mir doch noch eine krude Lösung eingefallen:

    Code
    function init() {
    	let testString="\x00190aZ\xFF"
    	for(i=0;i<testString.length;i++) {
    		let char = testString.charAt(i);
    		let num = btoh(char);
    		print("Character: '"+char+"' Number: '"+Number("0x"+num)+"'");
    	}
    }
    init();

    gibt:

    Code
    Character: '' Number: '0'
    Character: '1' Number: '49'
    Character: '9' Number: '57'
    Character: '0' Number: '48'
    Character: 'a' Number: '97'
    Character: 'Z' Number: '90'
    Character: '�' Number: '255'

    Also genau das, was ich will. Aber vielleicht kennt jemand noch eine elegantere Lösung?

    Für die Heizung habe ich das so umgesetzt, dass ein Shelly 2PM Gen3 mit AddOn lokal Vor- und Rücklauf sowie Aussentemperatur (letztere über mit NTC auf dem analogen Eingang des AddOns) messe und das Pumpenventil mit dem Storen-Modus des 2PMs öffne und schließe. Das Script nimmt die lokale Zeit für eine Nachtabsenkung. Über virtuelle Komponenten kann ich von aussen Dinge konfigurieren, z.B. habe ich eine Number-Komponente, um einen Offset zur ermittelten Heizkurve einzustellen, falls es mir grad zu warm oder zu kalt ist. Die Komponente wird automatisch von Home Assistant erkannt und dort auch als Schieberegler angeboten. Das schöne ist, das Ganze funktioniert rein lokal. Wenn das Netzwerk weg ist, fehlt halt die Möglichkeit, einen Offset zu setzen oder die Messwerte auszulesen, aber die Heizung läuft weiter.