Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. 433 Mhz "Baumarkt Steckdosen" schalten - Kleines Beispiel

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    433 Mhz "Baumarkt Steckdosen" schalten - Kleines Beispiel

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      Dr.iller last edited by

      Hallo zusammen,

      wie muss das Skript eingebunden werden in ioBroker? JavaScript Engine?

      VG Alex

      @DerUwe:

      Ahoi!

      Dann muss ich meinen Senf auch mal zu den Billigsteckdosen geben 🙂

      Unten mein Script das auch gleich die Objekte in iobroker mit erzeugt.

      Welches Objekt welchen Code versenden soll steht im Dictionary PwrplugConfig

      ! /* System Baumarktsteckdosen Verbindung zwischen Baumarktsteckdose und iobroker Signal ! 09.01.2017: Initial Script: Script defines variables to control stupid powerplugs you need a script to send the code via cheap 433MHz transmitter, soldered on gpio pins on raspberry */ ! //Dictionary of all used power plugs const Topicfolder = 'Baumarktsteckdosen' var PwrplugConfig ={ 'SZ_4' :'11111 4', 'SZ_Licht_Links' :'11111 2', 'SZ_Licht_Rechts' :'11111 1', 'SZ_TV' :'11111 3', 'WG_Hi_Rechts' :'00101 4', 'WG_Licht_Links' :'00101 3', 'WG_Radio' :'00101 1', 'WG_Stehlampe' :'00101 2', 'WZ_4' :'01111 2', 'WZ_Licht_Rechts' :'01111 4', 'WZ_Standlicht' :'01111 3', 'WZ_TV' :'01111 1' }; ! var timer1 = null; var timer2 = null; ! //############################### One Time execution on scriptstart####################################### //create all variables if not exist for (var item in PwrplugConfig) { createState(Topicfolder+'.'+item,0, {read: true,write: true,type: 'boolean', name: 'Eine Steckdose',desc: ''}); } ! //############################### Event execution ####################################### //subscribe all tags in topicfolder var cacheSelectorState = $('^javascript.0.'+Topicfolder+'.*/quote>); cacheSelectorState.on( function(obj) { var lastpkt = obj.id.lastIndexOf('.'); var substring=obj.id.substring(lastpkt+1); log('Steckdose geschaltet:'+substring+'['+PwrplugConfig[substring]+'] = '+ obj.state.val); send(PwrplugConfig[substring]+' '+ obj.state.val); if(timer1) clearTimeout(timer1); if(timer2) clearTimeout(timer2); timer1 = setTimeout(function() {send(PwrplugConfig[substring]+' '+ obj.state.val);}, 500); timer2 = setTimeout(function() {send(PwrplugConfig[substring]+' '+ obj.state.val);}, 1000); }); ! function send(val) { exec('/sbin/send ' + val); } ! `

      1 Reply Last reply Reply Quote 0
      • D
        DerUwe last edited by

        Hi

        Sorry für die späte Antwort, ich war busy.

        Ja lege ein neues Javascript in iobroker an und paste den text vom script oben dort rein.

        Ich nehme an der Pfad zum send Befehl muss auch entsprechend angepasst werden.

        Dann kommt es noch darauf an unter welchen user der iobroker läuft, denn normalerweise darf nur root auf die GPIO pins zugreifen.

        Wenn du den send befehl als pi aufrufst, sollte das auch mit iobroker gehen.

        Ich habe meinen send befehl etwas aufgepimpt, weil Der normalerweise den Code nur einmal sendet:

         else {
                        switch (command) {
                            case 1:
                                mySwitch.switchOn(systemCode, unitCode);
                                usleep(300);
                                mySwitch.switchOn(systemCode, unitCode);
                                usleep(300);
                                mySwitch.switchOn(systemCode, unitCode);
                                usleep(300);
                                break;
                            case 0:
                                mySwitch.switchOff(systemCode, unitCode);
                                usleep(300);
                                mySwitch.switchOff(systemCode, unitCode);
                                usleep(300);
                                mySwitch.switchOff(systemCode, unitCode);
                                usleep(300);
                                break;
                            case 2:
                                // 00001 2 on binary coded
                                mySwitch.send("010101010001000101010001");
                                break;
                            case 3:
                                // 00001 2 on as TriState
                                mySwitch.sendTriState("FFFF0F0FFF0F");
                                break;
                            default:
                                printf("command[%i] is unsupported\n", command);
                                printUsage();
                                if (!multiMode) {
                                    return -1;
        
        

        Das heisst mit dem Aufruf von send schickt der befejl das Kommando drei mal raus! Damit schalte ich bisher jede Steckdose gewissenhaft ein und aus

        @Dr.iller:

        Hallo zusammen,

        wie muss das Skript eingebunden werden in ioBroker? JavaScript Engine?

        VG Alex `

        1 Reply Last reply Reply Quote 0
        • D
          Dr.iller last edited by

          @DerUwe:

          Hi

          Sorry für die späte Antwort, ich war busy.

          Ja lege ein neues Javascript in iobroker an und paste den text vom script oben dort rein.

          Ich nehme an der Pfad zum send Befehl muss auch entsprechend angepasst werden. `

          Danke für die Antwort. - Kein Problem.

          Ich habe es auch als Script angelegt Allerdings erzeugt er mir keine Objekte in iobroker.

          Verwendest du noch zusätzliche NPM Module? Oder hast du sonst etwas in den JavaScript Einstellungen noch eingestellt?

          VG

          1 Reply Last reply Reply Quote 0
          • D
            DerUwe last edited by

            Guck mal wie das Script funktioniert:

            //Dictionary of all used power plugs

            const <u>Topicfolder</u> = 'Baumarktsteckdosen'

            var <u>PwrplugConfig</u> ={

            'SZ_4' :'11111 4',

            'SZ_Licht_Links' :'11111 2',

            'SZ_Licht_Rechts' :'11111 1',

            'SZ_TV' :'11111 3',

            'WG_Hi_Rechts' :'00101 4',

            'WG_Licht_Links' :'00101 3',

            'WG_Radio' :'00101 1',

            'WG_Stehlampe' :'00101 2',

            'WZ_4' :'01111 2',

            'WZ_Licht_Rechts' :'01111 4',

            'WZ_Standlicht' :'01111 3',

            'WZ_TV' :'01111 1'

            };

            var timer1 = null;

            var timer2 = null;

            //############################### One Time execution on scriptstart#######################################

            //create all variables if not exist

            for (var <u>item</u> in <u>PwrplugConfig</u>) {

            createState(Topicfolder+'.'+item,0, {read: true,write: true,type: 'boolean',

            name: 'Eine Steckdose',desc: ''});

            }

            Die FETT markierten Variablen werden hier verwendet.

            Die For Schleife geht also für jeden Eintrag in PwrplugConfig hin und weist der Variablen item den nächsten Wert zu und erstellt darauf die Variablen.

            in der Funktion createItem baue ich den string zusammen, wie er denn dann heissen soll: Baumarktsteckdosen.SZ_4 usw.

            Da das Script vom Adapter javascript ausgeführt wird, findest du das dann unter javascript.0. Baumarktsteckdosen.SZ_4

            Das sollte so funktionieren… Findest du Fehlermeldungen im log?

            ` > Danke für die Antwort. - Kein Problem.

            Ich habe es auch als Script angelegt Allerdings erzeugt er mir keine Objekte in iobroker.

            Verwendest du noch zusätzliche NPM Module? Oder hast du sonst etwas in den JavaScript Einstellungen noch eingestellt?

            VG `

            1 Reply Last reply Reply Quote 0
            • D
              Denwo last edited by

              Einen wunderschönen guten Abend und Hallo gesagt.

              Ich bin neue hier und habe die Tage etwas über die Funksteckdosen 433 MHz gesucht und muss sagen, dass ich sehr wenig gefunden habe.

              Für andere die noch am suchen sind habe ich mal eine Video gemacht und zeige dort wie ich es bis jetzt am einfachsten für mich gelöst habe.

              Meine Konfiguration:

              • RaspberryPI 2

              • 433 MHz Sender & Empfänger

              • wiringPi + rcswitch-pi Installation auf dem PI

              • ioBroker + Adapter

              https://www.youtube.com/watch?v=RTeHtsIAr5k

              1 Reply Last reply Reply Quote 0
              • D
                Dr.iller last edited by

                @DerUwe:

                Das sollte so funktionieren… Findest du Fehlermeldungen im log? `

                ja so habe ich das Skript auch verstanden.

                Im LOG erscheint nur folgendes:

                javascript.0 2017-01-23 20:34:45.566 info received all objects

                javascript.0 2017-01-23 20:34:45.260 info received all states

                javascript.0 2017-01-23 20:34:44.646 info requesting all objects

                javascript.0 2017-01-23 20:34:44.642 info requesting all states

                Aber ich habe eine Denkfehler. Derzeit läuft iobroker auf meiner Synology NAS und auf dem raspberry rscwitch. Somit kennen die beiden sich nicht.

                Hat jemand so etwas schonmal gelöst?

                Anbei 2 Screenshots wie ich dies eingebunden habe.
                1862_2017-01-23_20_35_12-iobroker.admin.jpg
                1862_2017-01-23_20_35_44-iobroker.admin.jpg

                1 Reply Last reply Reply Quote 0
                • D
                  Denwo last edited by

                  Von dem Script kann ich leider durch nicht ausreichende Kenntnisse nichts sagen.

                  Was das mit deinem NAS und PI betrifft…

                  • SSH Key anlegen, damit du vom NAS kein PW eingeben musst um auf dem PI etwas auszuführen

                  • den Befehl via SSH an den PI senden.

                  oder.. das PHP Script von der ersten Seite verwenden und auf dem PI anpassen, mit ioBroker dann das PHP Script aufrufen

                  1 Reply Last reply Reply Quote 0
                  • D
                    Dr.iller last edited by

                    @Denwo:

                    Von dem Script kann ich leider durch nicht ausreichende Kenntnisse nichts sagen.

                    das PHP Script von der ersten Seite verwenden und auf dem PI anpassen, mit ioBroker dann das PHP Script aufrufen `

                    Genau so versuche ich es nochmals.

                    Allerdings wird mein exec bisher nicht ausgeführt: exec('sudo ~/raspberry-remote/./send ' . $hauscode . ' ' . $ausgang . ' ' . $zustand);

                    Hier muss ich mal noch die Return Werte auswerten. GGf. mit shell_exec arbeiten. PHP ist da doch ein wenig eigen 🙂

                    1 Reply Last reply Reply Quote 0
                    • D
                      Denwo last edited by

                      der normale Befehl geht mit sudo?

                      ansonsten zum testen einfach mal..

                      sudo su - root
                      

                      dann

                      php /dein/pfad/zur/php/datei.php hauscode ausgang zustand
                      

                      kann an die Berechtigungen liegen, wem gehört die php Datei und welche rechte sind gesetzt.

                      1 Reply Last reply Reply Quote 0
                      • D
                        Dr.iller last edited by

                        @Denwo:

                        der normale Befehl geht mit sudo?

                        kann an die Berechtigungen liegen, wem gehört die php Datei und welche rechte sind gesetzt. `

                        Ja der normale Befehl mit Sudo klappt: sudo ~/raspberry/./send 11111 3 1

                        Der php Datei habe ich nun volle Rechte gegeben chmod 777

                        shell_exec leider auch noch ohne Erfolg.

                        Ist hier ein PHP Spezi anwesend ? 🙂

                        1 Reply Last reply Reply Quote 0
                        • S
                          Scubydoo last edited by

                          Hallo Dr.iller,

                          ich hatte das auch. Nun habe ich die Lösung gefunden:

                          zuerst habe ich den Pfad in der php Datei angepasst:

                          Zeile 29: exec('sudo /home/pi/raspberry-remote/./send ' . $hauscode . ' ' . $ausgang . ' ' . $zustand);

                          Anpassen der Rechte

                          sudo visudo
                          
                          

                          Folgende Zeilen hinzufügen:

                          # Funksteckdosen
                          www-data ALL=NOPASSWD: /home/pi/rcswitch-pi/send
                          
                          

                          Danach lief es bei mir.

                          1 Reply Last reply Reply Quote 0
                          • T
                            torstenh last edited by

                            Hallo zusammen,

                            ….es stimmt, es ist alles eine Frage der Rechte. Wenn der normal Befehl mit "sudo" funtioniert. Ich habe im Script die "Echo" Ausgabe eingebaut damit man schauen kann ob der Befehl ausgeführt wurde.

                            Wenn die Rechte stimmen, schau mal wem die Datei gehört und passe es auch noch an, dann sollte es gehen

                            Grüße,

                            Torsten

                            1 Reply Last reply Reply Quote 0
                            • S
                              Scubydoo last edited by

                              @torstenh:

                              Hallo zusammen,

                              ….es stimmt, es ist alles eine Frage der Rechte. Wenn der normal Befehl mit "sudo" funtioniert. Ich habe im Script die "Echo" Ausgabe eingebaut damit man schauen kann ob der Befehl ausgeführt wurde.

                              Wenn die Rechte stimmen, schau mal wem die Datei gehört und passe es auch noch an, dann sollte es gehen

                              Grüße,

                              Torsten `

                              Hallo Torsten,

                              die Echo Ausgabe kam bei mir trotzdem. Nur geschaltet hat an der Stelle nichts.

                              1 Reply Last reply Reply Quote 0
                              • C
                                Chauffeur last edited by

                                Habe jetzt auch mal versucht, alles nach Anleitung (Link erster Post) einzurichten.

                                Jetzt habe ich schonmal das Problem, dass ich einen Pine64 nutze und keinen Raspi. Darauf lässt sich wiringPi leider nicht installieren.

                                Allerdings gibt es eine wiringPi-Pine64, mit dieser klappt es.

                                Dann folgt raspberry-remote, scheinbar setzt diese aber wiringPi voraus und erkennt wiringPi-Pine64 nicht. Folgendes bekomme ich zu sehen:

                                ubuntu@Pine64ubuntu:~/raspberry-remote$ make send
                                g++ -Wall -lwiringPi   -c -o RCSwitch.o RCSwitch.cpp
                                In file included from RCSwitch.cpp:27:0:
                                RCSwitch.h:31:26: fatal error: wiringPi.h: No such file or directory
                                compilation terminated.
                                <builtin>: recipe for target 'RCSwitch.o' failed
                                make: *** [RCSwitch.o] Error 1</builtin> 
                                

                                Alternativ habe ich pilight versucht, aber auch dies lässt sich nicht richtig installieren (die config.json z.B. ist vorhanden, aber der service lässt sich nicht starten, da nicht vorhanden).

                                Hat jemand schonmal einen 433-Sender auf dem Pine64 zum laufen gebracht?

                                1 Reply Last reply Reply Quote 0
                                • C
                                  Clausi821 last edited by

                                  ​

                                  Hallo mein Name ist Tobias und ich bin neu hier.

                                  Seit kurzen interessiert es mich meine Wohnung per Handy und co. steuern zu können.

                                  Erst mal reicht es mir die Lampen über Funksteckdosen zu steuern.

                                  Möchte aber demnächst auch Heizung, Fernseher und co steuern.

                                  Ich möchte alles über den Browser mit Hilfe von vis steuern

                                  und mit dem iPhone mit der Home App (auch per Siri).

                                  In iobroker habe ich HomeKit, yahka, vis, Web und JavaScript installier.

                                  Mittlerweile kann ich über ein JavaScript in vis meine Lampe steuern. (dank der Anleitung hier im Forum)

                                  Im iPhone erscheint der Knopf, wenn ich das JavaScript in yahka einrichte (hier habe ich auch das Script Lichtschalter_Dummy hinterlegt), aber wenn ich auf den Knopf drücke geht, die Lampe nicht an.

                                  Komischerweise geht es Per Siri aber super hier kann ich die Lampe an und aus machen.

                                  Den Fehler denke ich gefunden zu haben. Im log steht der richtige Befehl innerhalb von 0,1 Sekunden

                                  zwei Mal drin wenn ich im iPhone Licht an oder aus anklicke. Per Siri oder vis steht der Befehl nur einmal drin.

                                  Kann mir jemand sagen, wie ich das behebe?

                                  Liebe Grüße Tobias
                                  2860_img_2236.jpg

                                  1 Reply Last reply Reply Quote 0
                                  • Dutchman
                                    Dutchman Developer Most Active Administrators last edited by

                                    Poste mal dein Script 😉

                                    –-----------------------

                                    Send from mobile device

                                    1 Reply Last reply Reply Quote 0
                                    • C
                                      Clausi821 last edited by

                                      @Dutchman:

                                      Poste mal dein Script 😉

                                      –-----------------------

                                      Send from mobile device `

                                      Hier das Script danke für die schnelle Reaktion.
                                      2860_foto.jpg

                                      1 Reply Last reply Reply Quote 0
                                      • Dutchman
                                        Dutchman Developer Most Active Administrators last edited by

                                        @Clausi821:

                                        @Dutchman:

                                        Poste mal dein Script 😉

                                        –-----------------------

                                        Send from mobile device `

                                        Hier das Script danke für die schnelle Reaktion. `

                                        hmm…. eigentlich sollte das commando stimmen und nicht 2 mal geschossen werden muessen.

                                        Bei 433 MHZ ist es leider so das nicht immer alle befehle ankommen.

                                        Du koenntest jetzt noch mit einen delay dasselbe command 0.1 sekunden nochmal schicken

                                        Benutze dazu de block timeout (nicht interval !), setze diesen unter den jetzigen exec und kopieren deinen exec block darein (fuer beide)

                                        das ist die logik

                                        • variable geanedert

                                        • check

                                        • execute

                                        • 0,1 sec spaeter execute nochmal

                                        ~Dutch

                                        1 Reply Last reply Reply Quote 0
                                        • C
                                          Clausi821 last edited by

                                          @Dutchman:

                                          hmm…. eigentlich sollte das commando stimmen und nicht 2 mal geschossen werden muessen.

                                          Bei 433 MHZ ist es leider so das nicht immer alle befehle ankommen.

                                          Du koenntest jetzt noch mit einen delay dasselbe command 0.1 sekunden nochmal schicken

                                          Benutze dazu de block timeout (nicht interval !), setze diesen unter den jetzigen exec und kopieren deinen exec block darein (fuer beide)

                                          das ist die logik

                                          • variable geanedert

                                          • check

                                          • execute

                                          • 0,1 sec spaeter execute nochmal

                                          ~Dutch `

                                          Ok danke werde ich nachher mal Probieren da ich nicht zuhause im Wlan bin und somit die Apple Home app nicht geht.

                                          Hab leide noch keine Funktionierende VPN Verbindung.

                                          Komisch ist das es bei Vis mit dem Script super geht per Siri auch nur wenn ich in der app den Knopf selber drücke und nicht Siri den Befehlt auslöst kommt es zu dieser Doppelten Übertragung.

                                          Ich werde heute Abend berichten.

                                          1 Reply Last reply Reply Quote 0
                                          • Dutchman
                                            Dutchman Developer Most Active Administrators last edited by

                                            @Clausi821:

                                            @Dutchman:

                                            hmm…. eigentlich sollte das commando stimmen und nicht 2 mal geschossen werden muessen.

                                            Bei 433 MHZ ist es leider so das nicht immer alle befehle ankommen.

                                            Du koenntest jetzt noch mit einen delay dasselbe command 0.1 sekunden nochmal schicken

                                            Benutze dazu de block timeout (nicht interval !), setze diesen unter den jetzigen exec und kopieren deinen exec block darein (fuer beide)

                                            das ist die logik

                                            • variable geanedert

                                            • check

                                            • execute

                                            • 0,1 sec spaeter execute nochmal

                                            ~Dutch `

                                            Ok danke werde ich nachher mal Probieren da ich nicht zuhause im Wlan bin und somit die Apple Home app nicht geht.

                                            Hab leide noch keine Funktionierende VPN Verbindung.

                                            Komisch ist das es bei Vis mit dem Script super geht per Siri auch nur wenn ich in der app den Knopf selber drücke und nicht Siri den Befehlt auslöst kommt es zu dieser Doppelten Übertragung.

                                            Ich werde heute Abend berichten. `

                                            warte mal ich had da so ne vermutung, hast du auch history installiert ?

                                            Meine vermutung: deine variable ist ein boolean, yahka schikt eine 1 oder 0, der wert wird 2 mal geupdated (0 und falsch oder 1 under true)

                                            dadurch aenderd sich die variable 2 mal mit als folge 2 befehle.

                                            das koennstest du abfangen durch in deinem if noch UND = 0 oder UND = 1 hinzu zu fuegen.

                                            Mit history log koenntest du sehen was die variable macht, mir ist aufgefallen das yahka manchmal 0/1 und manchmal true/false benutzt.

                                            ~Dutch

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            879
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            21
                                            56
                                            38581
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo