Beiträge von Jochen_145

VPN/Proxy erkannt

Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.

    Ein vielleicht wichtiger Hinweis, wenn jemand mit den o.g. Scripten ebenfalls versucht, einen mit einer Authentifizierung versehenen Shelly abzufragen:

    Es reicht nicht, wie in der Browser-API, einmalig das Passwort zum Shelly zu senden, damit sich dieser "freischaltet".

    Sendet man die Scriptreihenfolge

    Code
    sendAuthentification(PassWord,ShellyPRO3emIP);
    getActivePower();

    wird das Anfragen der ActivePower wieder mit dem response.code = 401 abgelehnt.


    Also muss man bei jeder Abfrage einer Messgrösse die Authentifikation mitschicken, damit man den Messwert zurückgesendet bekommt.

    Entsprechend funktioniert die Funktion sendAuthentification(PassWord,ShellyPRO3emIP) zwar, aber ist im Grund unnütz.

    Ich weiss nicht, ob das so offensichtlich bewusst ist?


    Entsprechend habe ich beide Funktionen zusammengefasst und frage die ActivePower des Shelly PRO 3em mit der folgenden Funktion ab, wenn der Shelly passwort geschützt ist:


    Versucht man die ausgelesene Leistung über den Funktionsaufruf zurückzusenden, also mit

    Code
    return = actualActivePower;

    übergibt der Funktionsaufruf getAuthenticatedAcivePower(PassWord,ShellyPRO3emIP); undeffinierte Werte. Daher schreibe ich die Werte in der Funktion direkt in eine "globale Variable", was nicht besonders schön ist.

    Wenn jemand weiss, warum das so ist und wie ich das umgegen kann, bin ich für Anregungen offen und würde die Funktion entsprechend anpassen.


    tvbshelly

    Danke nochmal für die tolle Hilfe :thumbup:

    Vielen Dank für deine Unterstützung :thumbup:

    Leider funktioniert es bei mir, warum auch immer, immer noch nicht, obwohl ich die Funktion von dir jetzt komplett übernommen habe. Der response.code ist "undefined"

    Kannst du mal ein fehlerhaftes Passwort verwenden und gucken, welcher response.code angezeigt wird?

    Bzw. den response.code, der bei erfolgreicher Authentifizierung angezeigt wird?

    Der muss ja dann eigentlich 200 sein, oder?


    Das Auslesen des Messwert aus dem Shelly wird mit response.code = 401 verweigert, was entsprechend passt, da die Authentifizierung nicht erfolgreich war


    Einen Versuch würde ich gern noch machen, wenn es dann nicht geht, muss ich wohl den Passwortschutz des PRO 3em ausschalten.

    Denn dann habe ich Werte...

    Schon mal vielen Dank für deine Hilfreichen Infos :thumbup:

    Ich weiss nicht, ob ich an dieser Stelle mit meiner Copy-and-Past-Programmierkünsten an die Grenzen stosse..

    Zitat

    Insofern müsste als URL http://user:password@url funktionieren. Das habe ich selber aber noch nie verwendet.

    das sollte ja dann in der Form

    Code
    http://192.168.33.1/rpc/HTTP.GET?url="http://admin:supersecretpassword@10.33.53.21/rpc/Shelly.Reboot"

    laut Doku gesendet werden, wobei ich nicht verstehe, warum an 192.168.33.1 die IP zur Freigabe mit 10.33.53.21 gesendet wird. Ich hätte hier jetzt die gleiche IP erwarte, mit der der Shelly angesprochen wird :/

    Ensprechend habe ich versucht eine Funktion zu bauen, die mir diesen String zusammenbaut und zum Shelly sendet:

    Leider bekomme ich damit die Autenfizierung nicht geschaltet und der Responce.Code ist "undefined"


    Ohne Autentifizierung erhalte ich den Responce.Code = 401, wenn ich versuche den "/rpc/Shelly.Getstatus zu senden, was auch zu erwarten ist.

    Und ohne Password am Shelly kann bekomme ich den "/rpc/Shelly.GetStatus" positiv beantwortet..


    Aber ganznebenbei:

    der JSON-String des Shelly PRO 3em schreibt die akutelle Netzleistung in den Roud: "em:0", "total_act_power".

    Wie zur Hö... bekomme ich "em:0" geparst, die ":" will das Script an der Stelle nicht:

    Code
    actualActivePower = parsedData.em:0.total_act_power;


    ... sorry für die ganzen Anfängerfragen :saint:

    Hallo zusammen,

    kaum läuft das erste Script, kommen die Probleme mit den nächsten ^^

    Es soll eine last- und temperaturabhängige Heizstarbschaltung auf einen Shelly 2PM Gen3 realisiert werden.

    Dafür möchte ich die Netzeinspeiseleistung von (m)einem Shelly PRO 3em über einen Shelly.call - "HTTP.GET" Befehl ausgelesen.

    Der PRO 3em ist jetzt aber Passwort geschützt, sodass der einfache Shelly.call natürlich ins Leere läuft.


    Wie sende ich das Passwort des PRO 3em aus dem Script des 2PM?

    Meine Suche im Forum mit für mich nicht eindeutige Lösungen aus einem Shelly-Scrip ergeben.

    Gibt es passende Lösungen oder kann mir jemande helfen, wie ich mein Script erweitern muss, damit ich den Passwortschutz freiscahlten kann?


    Danke für weitere Hilfe

    Jochen

    danke !


    Ja, dieses Scrip funktioniert jetzt auch beim mir.

    Ich gucke mir mal in Ruhe die Unterschiede an und versuche zu verstehen, wo mögliche Fehler waren.


    Für mich zum Verständniss (ich bin ja kein Programmierer)

    der Aufruf:

    Code
    Shelly.addEventHandler(handleSolarPower);
    getSolarPower()

    kommt in das Main-Programm aus in dem ich die "Solarpower" als Wert anzeigen will?


    Und noch mal zu allgemeinen Verständnis:

    Ziel dieser Funktion ist es, dass nur, wenn der JSON-String gelesen ist, dieser auch verwendet und gepased wird, damit ich die aktuelle Solarleistung im Hauptprogramm angezeigt bekomme.

    Das bedeutet, dass das Parsen des Strings nach dem o.g. Aufruf stattfinden muss und der entsprechenden Variablen zugewiesern werden kann.


    Wird, bzw wie wird, dieses Pharsen dann unterbunden, wenn das Event nicht erfüllt ist?

    Dann muss ich die Zuordnung an die Bedinung event.info.data === 99 hängen, oder?


    Danke nochmal für deine Hilfe :thumbup:

    Hallo zusammen,


    ich muss vorab sagen: ich bin eigentlich kein Programmierer und nutze die Copy-and-Paste Programierung um bestehende ShellyScrips anzupassen.


    Ich stehe gerade aber auf dem Schlauch und gebrauche Unterstützung.

    Ich möchte die akutelle Solarleistung meiner openDTU im Shelly anzeigen lassen und nutze eine Funktion, die den JSON-String der openDTU liest, parsed und eigentlich den Wert "total.Power.v" zurückliefern soll.

    Ich kann mir den Wert in der Funktion selber anzeigen lassen, bekommte den gepasten JSON aber nicht in eine andere Variable übergeben und damit nicht aus der Funktion heraus.

    Was mache ich falsch?


    hier die Funktion:


    die Console gibt mit richtig den Wert "parsedData.total.Power.v aus.

    lasse ich mir den Wert über die Variable "solarPower" anzeigen, ist der Wert undeffiniert.

    Entsprechend kann ich ihn nicht an die Funktion übergeben..


    Am Ende möchte ich über den Aufruf "getSolarPower()" die Grösse "parsedData.total.Power.v" im Hauptprogramm aufrufen..

    Ich gehe davon aus, dass es sich hier um unterschiedliche Variablen-Typen handelt, die inkompartiebel sind(?)

    Was mache ich falsch?


    Danke für Hilfe !!

    Eins vorweg:


    ich bin "Scriping-Newbie" und versuche gerade das Scripting durch "copy-and-paste"-Programmierung vorgegebener Scripte zu verstehen und erlernen.


    Karaiso

    danke für das Veröffentlichen deines Scriptes.

    Ist vielleicht nicht die einfachste Art um Scripting zu verstehen, aber man lernt ja mit dem Aufgaben und ein bisschen etwas verstehe ich schon.

    Aber jetzt zu meinen (dummen?)-Newbie Fragen:


    Wesentliche Features sind:
    + Einschalten wenn absehbar genügend Leistung ins Netz eingespeist wird
    + Ausschalten wenn absehbar keine Leistung ins Netz eingespeist wird
    + Als Trigger wird ein 7,5 Minuten Durchschnitt verwendet
    + Es wird garantiert nicht häufiger als alle 15 Minuten geschaltet
    + Das Script läuft lokal und auch ohne Netzwerk

    Wo deffinierst du, was "genügend Leistung" ist?

    Eine entsprechende Variablenzuordnung übersehe ich offensichtlich in deinem Script.

    "PowerLimit" sollte AFAIU diese Leistung sein, aber wo deffinierst du den Wert?

    Gleiche Frage habe ich zur Triggerzeit. Diese sollte AFAIU "powerTime" sein, oder?


    Danke für Hilfestellung und Aufklärung :)

    Vorsicht:

    betrachte immer den Schaltstrom und damit die aktuelle Energie, die beim Trennen gerade über das Relais geleitet wird!

    diese entspricht Strom * Spannung und ist selbstverständlich jenseits des Nulldurchgangs grösser, als im Nulldurchgang.

    Entsprechend schaltet das Relais auch bei ohmschen Lasten ausserhalb des Nulldruchgangs eine Last und es entsteht ein Schaltfunken, der in Abhängigkeit der aktuellen Abschaltspannung grösser oder kleiner ist.

    Bei induktiven Lasten ist er selbstverständlich noch grösser und entsprechend bleibt der Lichtbogen länger stehen, wie du richtig schreibst.


    Nichts desto trotz wird ein Relais beim Ausschalten unter Last stärker belastet, als ohne Last (also im Nulldurchgang).

    Entsprechend werden die möglichen Schaltspiele eines Relais immer in Abhängigkeit des geschalteten Strom angegeben.

    Für mich als Shelly-"Neuling":

    ich habe die 1.7.0-beta1 nicht installiert, kämpfe aber auch mit den WLAN-Ausfällen seit dem letzten Update auf 1.6.2.

    Ich gehe davon aus, dass die Anpassungen der 1.7.0-beta1 auch in der beta2 enthalten sind und ich die Diagnose-Tests ebenfalls durchführen sollte/kann?


    Ich bin bei beta-Software immmer ein bisschen "konserativ": eine "verschlimmbesserung" gegenüber der 1.6.2 ist nicht bekannt, die Version kann problemlos getestet werden?