Ankündigung

Einklappen
Keine Ankündigung bisher.

Entwicklung SMS-Steuerung

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Entwicklung SMS-Steuerung

    Nachdem makki ja den smsd zur Verfügung gestellt hat und das senden von SMS so einfach ist -> https://knx-user-forum.de/wiregate/1...gateway-2.html kam mir die Idee das ganze natürlich auch umgekehrt einzusetzten. Bei dem schönen Wetter mitten im Juli hat man ja doch den ein oder anderen Nachmittag Zeit ohne Reue drin zu sitzen.

    Also das Grundgerüst steht, alle 60 Sekunden wird das Plugin aufgerufen und checkt den Ordner von smstools/smsd auf neue Nachrichten/Dateien. Dann werden die Dateien ausgelesen, der Emfänger und die Nachricht extrahiert.
    Der Absender sollte in einer @allow-Liste stehen (nicht umgesetzt, aber kein Problem) um Missbrauch zu vermeiden.

    Frage 1:
    Theoretisch müsste es doch auch möglich sein das Plugin aufzurufen sobald eine Datei im entsprechenden Ordner erstellt wird (vgl. etc/wiregate/plugin/generic) - Priorität niedrig. Nice to have.

    Frage 2:
    Wie würdet Ihr euch die Auswertung des Textes wünschen/vorstellen?
    Im Beispiel hab ich nur einen einzigen Befehl implementiert. Licht an oder Licht aus im Esszimmer (Essen). Mit ein paar arrays und hashes oder dem Auslesen der eibga.conf könnte man da bestimmt was gutes machen, setzt aber eine sehr gepflegt eibga.conf voraus. Weiter problematisch auch die unterschiedlichen GAs für Rückmeldung, Wert, relativ dimmen etc.. Hier ist ein wenig Brainstoming gefragt. Hier beruht das System erstmal aus dem Zusammensetzten der GA mit Hauptgruppe, Mittelgruppe und Untergruppe.

    Eine Nachricht wäre zum Beispiel:
    "Licht unten zum Essen an"
    $hg -> Hauptgruppe: Licht = 1 / Steckdosen =2
    $mg -> Mittelgruppe: Unten(EG) = 1 / Oben(OG) = 2
    $ug -> Untergruppe: Essen(Esszimmer Licht) = 60
    $val -> Wert: An = 1 / Aus =0

    GA: 1/1/60 Wert: 1

    Hier nun das Grundgerüst (@allow ist erstmal egal):
    Code:
    #!/usr/bin/perl
    # sms-action
    # make action with sms
    # JuMi2006 / www.knx-user-forum.de
    # Version: 0.1 alpha
    # Datum: 13.07.2012
    
    use warnings;
    use strict;
    
    
    ### KONFIGURATION ###
    
    my $directory = "/var/spool/sms/incoming";		#Pfad fuer smsd
    my $newpath = "/var/spool/sms/knx-used";
    my @allow = (4916098331****,4917238*****);
    
    ### KONFIGURATION ENDE ###
    
    ### Variablen definieren
    my ($entry,$content,@line,$from,$hg,$mg,$eg,$val);
    
    
    ### Verzeichnis einlesen
    opendir (DIR, $directory) or warn "Could not open the dir ".$directory.": $!";
    my @files = grep !/^\.\.?$/, readdir DIR;
    closedir DIR;
    
    
    ### Dateien abarbeiten
    while (defined($entry = shift @files))
    {
      &read_line;		#Zeilenweise Datei einlesen
      &work(@line);		#Empfänger extrahieren (fuer spaetere Verifizierung)
      &action($content);	#Nachrichtentext auswerten
      &move ($entry);   	#Nachrichtendatei verschieben
    }
    
    
    ### sub Auswertung
    sub action{
        if ($content =~ /\bLICHT\b/i)
    	{$hg="1";
             print "Licht";}
        if ($content =~ /\bOBEN\b/i)
    	{$mg="2";
             print "oben";}
        if ($content =~ /\bUNTEN\b/i)
    	{$mg="1";
             print "Licht";}
        if ($content =~ /\bAN\b/i)
    	{$val="1";
             print "AN";}
        if ($content =~ /\bAUS\b/i)
    	{$val="0";
             print "AUS";}
        if ($content =~ /\bESSEN\b/i)
    	{$eg="60";
             print "60";}
    #system("groupwrite ip:localhost $hg/$mg/$eg $val"); #für Konsole
    knx_write($hg."/".$mg."/".$eg,$val,1.001);
    }
    
    ### sub Empfänger auslesen
    sub work{
    my $nr=$from;		# extract number
    substr($nr,0,6,"");	# extract number
    #print ($nr,"\n");	# testing only
    #print ($content,"\n");	# testing only
    }
    
    ### sub Datei auslesen
    sub read_line {
        open (DATEI, $directory."/".$entry); # mit DATEI kann auf die genannte Datei später im Skript zugegriffen werden; < bedeutet, daß sie nur zum Lesen geöffnet wird
        @line=<DATEI>;      # Dateiinhalt in array speichern
        close DATEI;        # Datei wieder schließen
        $from = $line [0];	# Line 1 contains number in string "From: xxxxxxxx"
        chomp $from;	# remove LF
        $content = $line [12];	# Line 13 contains message
        
    }
    
    ### sub Datei verschieben
    sub move {                 
        #print $entry;
        unless(-d $newpath)	# if directory not exists
        {
        mkdir $newpath or die;	# Verzeichnis anlegen
        }
        #system("cp $directory/$entry $newpath/$entry"); #only for testing
        system("mv $directory/$entry $newpath/$entry"); # Datei verschieben damit sie nicht noch einmal bearbeitet wird
        }
    
    #sub read_file {
    #    open (DATEI, $directory."/".$entry); # mit DATEI kann auf die genannte Datei später im Skript zugegriffen werden; < bedeutet, daß sie nur zum Lesen geöffnet wird
    #    undef $/;                  # bewirkt, daß die gesamte Datei gelesen wird
    #    my $filecontent=<DATEI>;      # Dateiinhalt in Variable speichern
    #    close DATEI;               # Datei wieder schließen
    #    print ($filecontent,"\n");         #Datei drucken
    #}
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    #2
    Zitat von JuMi2006 Beitrag anzeigen
    Also das Grundgerüst steht, alle 60 Sekunden wird das Plugin aufgerufen und checkt den Ordner von smstools/smsd auf neue Nachrichten/Dateien.
    Klingt nach nem guten Plan, millisekunden-response ist mit SMS eh nicht..

    Frage 1:
    Theoretisch müsste es doch auch möglich sein das Plugin aufzurufen sobald eine Datei im entsprechenden Ordner erstellt wird (vgl. etc/wiregate/plugin/generic) - Priorität niedrig. Nice to have.
    Nicht so ohne weiteres, das Aufrufen der Plugins erfolgt ziemlich "dumm-dumm", da wird jedes File in dem Ordner auf die Änderungszeit geprüft, das war unterm Strich das mit Abstand Resourcen-schonendste.
    Also keine Bange, eher das Plugin öfters aufrufen und im Verzeichnis nachschauen, das kommt eh alles ausm Cache und ist recht flott, statt irgendwelcher "Verrenkungen"..

    Frage 2:
    Wie würdet Ihr euch die Auswertung des Textes wünschen/vorstellen?
    Ich würde mich an smscon orientieren und es etwas flexibler machen (damit schalte ich auf meinem N900 BT nach Anwesenheit an und aus )
    Also z. B. "<optionalesSECRET>,KOMMANDO,WERT"

    KOMMANDO kann dann (case-insensitive?)
    KNXGA;1/2/3;1
    TEXT;Licht Essen an (eher nach deinem Beispiel)
    TEXT;Kühlung an
    TEXT;Heizung an
    TEXT;Abwesend
    usw.. (man kann sich dann aussuchen ob man sich die GA merkt oder im Plugin die Funktion einhackt)
    WOL(wakeonlan);MAC
    SHELL (gefährlich!!)
    oder so ähmlich sein, was einem dann halt so alles einfällt

    Secret wäre optional/ergänzend zur Absendernummer

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      Was verstehst Du unter flexibler machen? smscon hab ich heute morgen ... war recht früh ... nur mal kurz überflogen, muss ich mir nochmal in Ruhe ansehen, wirkte aber auf das N900 abgestimmt/spezialisiert?

      Ich hab dem smsd bzw. dem Plugin per regex gerade noch % und GAs beigebracht.

      Also Esszimmer:
      "1/1/60 an" oder eben "1/1/60 50%" oder "Licht Essen unten an" schalten das Licht an bzw. aus.

      Zykluszeit 60 Sekunden müsste eigentlich wirklich reichen, so eine SMS braucht ja eh ne Weile und primär geht es ja um Gartenbewässerung, Heizung oder sonstige zeitlich tolerante Funktionen.

      Dabei gleich ne Frage, gibt es auf dem WG schon nen simplen mail-client ?
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #4
        Zitat von JuMi2006 Beitrag anzeigen
        Was verstehst Du unter flexibler machen?
        Genau das:
        Also Esszimmer:
        "1/1/60 an" oder eben "1/1/60 50%" oder "Licht Essen unten an" schalten das Licht an bzw. aus.
        smscon hab ich heute morgen ... war recht früh ... nur mal kurz überflogen, muss ich mir nochmal in Ruhe ansehen, wirkte aber auf das N900 abgestimmt/spezialisiert?
        Ja, das ist für was ganz anderes gedacht (verlorenes Handy tracken, mit Live-Bild link zu Maps usw )

        Zykluszeit 60 Sekunden müsste eigentlich wirklich reichen, so eine SMS braucht ja eh ne Weile und primär geht es ja um Gartenbewässerung, Heizung oder sonstige zeitlich tolerante Funktionen.
        Sehe ich genauso und wiegesagt, jetzt alle 60s einen foreach-dir zu machen halte ich für ungefährlich, das macht der wiregated jede Sekunde..

        Dabei gleich ne Frage, gibt es auf dem WG schon nen simplen mail-client ?
        Ein richtiger MTA ist ja eigentlich drauf (exim4) aber für normale Menschen kaum bedienbar, das macht entweder mir als Provider oder dem Anwender heftige Bauchschmerzen; oder beides..
        Technisch (ein lokaler MTA wäre besser, der queued, retried usw) nicht perfekt aber eherblich einfacher zu erklären:
        SourceForge.net Repository - [openautomation] Contents of /wiregate/plugin/generic/SMTP-eMail.pl

        Funktioniert so problemlos, solange Inet und GMX/Gmail am leben sind, in anderen Fällen wäre dann eh wieder SMS über einen lokalen Stick das bessere und das können wir ja schon

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Was auch toll wär, wär ne USB-ISDN-Karte, so brauch ich keinen Mobilfunkvertrag.

          Im Moment nutz ich selber die Möglichkeit mir SMS schicken zu lassen indem das über ne spezielle E-Mail-Adresse bei der Telekom läuft.


          Ist sowas auch möglich, bzw. gibts überhaupt USB-ISDN-Karten die unter Linux lauffähig sind?
          Anscheinend ja schon, der HS4 setzt doch solche ein wenn ich mich recht entsinne.

          Kommentar


            #6
            Korrekt. Es gibt Linux-taugliche USB-ISDN-Adapter.
            Gruß Matthias
            EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
            - PN nur für PERSÖNLICHES!

            Kommentar


              #7
              ...und eine Liste findet man bei MISDN v2 Hardware - mISDN.org

              Marcus

              Kommentar


                #8
                Und ich mag sogar sagen das mein Dial-Backup* damit läuft (auf einem WG mit Kernel 2.6.26, also der erste):
                Code:
                lsusb 
                Bus 002 Device 002: ID 0675:1688 Draytech miniVigor 128 ISDN TA
                Ist halt eine "Expertenfunktion", nichts für Plug&Play aber geht (undokumentiert) wie so vieles - einwandfrei.

                *) Weil eigentlich machen wir das mit einem Cisco, der 1812er (Homeoffice!!) ist aber sowohl mit dem VDSL50 alleine als auch dem Inter-Vlan-Routing einfach abgesoffen, war dank Lüfter zu laut, das Wlan ist eh unbrauchbar und kostet im Normalfall dann auch noch Faktor 3.. (Letzteres wäre mir jetzt ehrlichgesagt egal gewesen)
                Vom Stromverbrauch garnicht zu sprechen, >30 vs. <5W..

                Makki
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  #9
                  Okay danke, das ist eigentlich genau das was ich such.

                  Auf Ebay scheints die auch recht günstig zu geben.

                  Nur wie schwierig ist es das zum laufen zu bekommen?
                  Ich bin jetzt nicht der absolute Noop in Sachen Linux, aber viel mehr als x-mal Debian aufsetzen und Apache, MySQL und PHP in gang setzen hab ich bis jezt nicht gemacht.

                  Mein Ziel wäre dass das Teil am besten am WG hängt (denn das ist außer Router und Co eigentlich das einzige was 24/7 fast garantiert läuft) und ausm Plugin raus SMS verschickt werden können (und als super freak Version auchnoch anrufe, aber das muss nich sein :P )

                  Is das ohne Kernel compilen oder so Späße möglich?

                  Kommentar


                    #10
                    Zitat von daviid Beitrag anzeigen
                    Is das ohne Kernel compilen oder so Späße möglich?
                    Ja, ich war seeehr grosszügig mit Treibern beim backen des WG-Kernels..
                    Aber ich habs noch nie probiert (also ISDN->SMSC..), für Beckenrandschwimmer ist das eher nix, wenn man ein bisschen weiss was man tut: vermutlich "easy"

                    Makki
                    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                    -> Bitte KEINE PNs!

                    Kommentar


                      #11
                      OK, aber auf eBay laufen die Dinger für nen Appel und nen Ei, das muss ich einfach probieren


                      Die entsprechende Fragerei zur Inbetriebnahme verlager ich dann aber besser ins ubuntu-user-forum oder was dergleichen bevor ihr hier nich zuviel bekommt ... :P

                      Kommentar


                        #12
                        Naja, fragen darf man (ist einfacher als nachher zu erklären das z.B. die Fritzen eine unauflösbare Treiber-Nightmare sind..)
                        Grundsätzlich läuft das Ding, man muss halt wiegesagt nur wissen was man tut..

                        Makki
                        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                        -> Bitte KEINE PNs!

                        Kommentar

                        Lädt...
                        X