SensorAndSwitch Haus-Automation auf Webserver-Basis

@ws65: Hauptsache es funktioniert. :)
 
@SF1975: Sorry, mein Fehler. Hab zuviel Text hin und her kopiert. Ist schon korrigiert.

Danke fürs aufmerksame Durchlesen, denn man selbst überliest manchmal so Sachen drei, vier Mal und bemerkts einfach nicht. :)
 
Kein Ding. Muss mir das alles heute Abend noch einmal in Ruhe anschauen. Mein portabler WebServer spielt seit einigen Versionen nicht mehr mit.
Mal schauen, wo es kneift.
 
Ich nutze bei PHP die Funktionen für zip, curl und teils auch fopen. Vielleicht fehlt ein Paket beim Webserver. Oder als Fehler auch sehr beliebt: Zugriffsrechte von Script und Ordner. Das Ganze so als Tipp, wo man mal nachschauen kann, wenns klemmt. ;)
 
Kannst du nochmal den "toggle" testen,
der klappt bei mir nicht (smarthome/smarthome.php?ain=xxx&schalter=toggle)
 
Ich habe mich eine ganze Zeit Lang mit Smart Home Systemen auseinander gesetzt. Was mir schon immer bei dem ganzen Smart Home gefehlt ist ist das verknüpfen von Funktionen und darauf hin Schalthandlungen oder sagen wir besser Aktionen auszuführen; Das müsste wir mal gemeinsam überlegen wir man das gut hinbekommt.

*1 Wenn Leistung an Steckdose 1 > 2000 Watt dann Steckdose 3 einschalten und email senden. - Der Anwendungsfall ist wenn die PV einspeist über einen Wert 2000 dann den Heizstab anschalten.
*2 Wenn Leistung an Steckdose 1 < 2000 Watt dann Timer 60 Sek. wenn dann immer noch > war da nicht < gemeint? 2000 dann Steckdose 3 ausschalten und email senden. - Der Anwendungsfall ist wenn die PV nicht mehr einspeist nichts sofort auf einen Wolke reagieren sondern noch ein wenig warten bevor ausgeschaltet wird.

*3 Wenn Dose X einmal eingeschaltet dann er erst wieder ausschalten wenn Leistung für x Minuten bei < Y Watt

Das beliebig stapelbar ...

Ich weiß das ist nicht ohne, aber wenn das geht wird das der Knaller ....
Ich muss das jetzt doch nochmal aufgreifen und die Moderatoren verzeihen mir bitte das Vollzitat, aber der Post liegt schon einige Seiten zurück und man soll noch den Zusammenhang verstehen können...

Oben sind drei Szenarien, die es mit SmartHome Automation zu realisieren gilt.

zu *1: E-Mail senden muss ich mal hier weglassen. Kann man das nicht in der Fritzbox für ein Gerät einstellen, wenn es seinen Schaltzustand ändert?
Code:
SCHID1.00,Leistung,Steckdose1,>,2000.000,0,SCHID0.00,Steckdose3,1
Würde bedeuten:
SchaltID 1.00 (erstes Kettenglied), Leistungsabfrage, Steckdose1 größer 2000, Timer 0, keine Folge-SchaltID, Steckdose3, an.


zu *2: Erstmal eine Anmerkung: Cron-Zeitfenster sind immer eine Minute für die kleinste Einheit, deswegen nehmen wir mal 3 Minuten (langsam ziehende Wolken :) ).
Code:
SCHID2.00,Leistung,Steckdose1,<,2000,000,3,SCHID0.00,Steckdose3,0
Würde bedeuten:
SchaltID 2.00 (erstes Kettenglied), Leistungsabfrage, Steckdose1 weniger 2000, starte 3 Prüfintervalle, Steckdose3, aus.


zu *3:
Code:
SCHID3.00,Leistung,Steckdose9,<,3000,9,SCHID0.00,Steckdose9,0
Würde bedeuten:
SchaltID 3.00 (erstes Kettenglied), Leistungsabfrage, Steckdose9 weniger 3000, starte 9 Prüfintervalle, Steckdose9 aus.


mal was Komplizierteres: Wenn Steckdose 1 an und 2 aus ist, schalte Steckdose 3 an.
Code:
SCHID4.00,Zustand,Steckdose1,1,1,0,SCHID4.01
SCHID4.01,Zustand,Steckdose2,1,0,0,SCHID0,00,Steckdose3,1


oder noch komplizierter: Wenn Steckdose 1 <10 Watt und wenn Steckdose 2 <5 Watt mindestens 6 Minuten lang hat, dann Steckdose 1 aus.
Code:
SCHID5.00,Leistung,Steckdose1,<,10.000,0,SCHID5.01
SCHID5.01,Leistung,Steckdose2,<,5.000,6,SCHID0.00,Steckdose1,0


Durch die SchaltID gäbe es eine Hirachie bei der "Erstprüfung" und eine Kette, durch die nachfolgende Kommazahl für Folgeglieder.

Programmtechnisch macht mir hier noch das Merken, in welchem Prüfintervall die jeweilige SchaltID sich befindet und bei welcher Unter-Schalt-ID es sich gerade befindet. Aber das wäre meine und nicht eure Sorge.

Mir ist wichtig, ob sich damit eure möglichen Schaltszenarien abbilden lassen würden. Bitte liefert mir ggf. mehr Beispiele, um das überprüfen zu können.
 
Kannst du nochmal den "toggle" testen,
der klappt bei mir nicht (smarthome/smarthome.php?ain=xxx&schalter=toggle)
Funktioniert bei mir problemlos.

smarthome.php?ain=0123456&schalter=toggle und auch
smarthome.php?name=FX-Dose&schalter=toggle

Kommt im Browser eine 0 oder 1 auf weißem Grund und sonst nichts oder alles leer? Wenn alles leer, dann wurde die AIN nicht gefunden. bzw. ist falsch oder falsch geschrieben (z. B. Zahlendreher).

Nachtrag: Probiere mal auch mit an und aus, statt toggle, ob das geht. Klappt das auch nicht, prüfe nochmal die AIN oder versuche es mit dem Gerätenamen: z. B.: smarthome.php?name=FX-Dose&schalter=toggle
 
Zuletzt bearbeitet:
@JL3: genial, sieht sehr gut aus .. email erst mal egal, kann man sich später oder jemand anderes anschauen ..

Ich erkläre mich bereit das ganze über Weihnachten zu dokumentieren, ein Wiki wäre dazu nicht schlecht, hat jemand ein Wiki das gesichert wird?

Ich schlage vor das wir den Szenarien Namen geben, der Name ist sekundär hilft aber bei schreiben über was man redet und man hat einen Erkennungswert!

Ich tipper einfach mal runter was mir so in den Sinn kommt
Noch eine Anwendung für meine Frau ... Die Heizung soll unter einer bestimmten Temperatur angehen, aber nur wenn sie im Zimmer ist (Indikator ist die
Schreibtischlampe, wenn die Sonne noch scheint geht es schneller dann wird PV-Strom benutzt)

S-Dose 1 wird temperatur gemessen und Tischbeleuchtung hängt dran
S-Dose 2 hängt eine Infrarot Flächenheizung dran
S-Dose 3 hängt ein Heizlüfter dran
S-Dose 4 ermittelt die leistung an der PV Ankage

Szenario: Arbeitszimmer warm
1) Wenn Temperatur Steckdose1 < 20 Grad und Steckdose 2 > 5 Watt dann Steckdose2 ein
2) Wenn Leistung Steckdose 3 > 2000 Watt dann auch noch den Heizlüfter einschalten
2) Wenn Temperatur Steckdose 1 > 24 Grad Steckdose 1 aus

bitte korrigieren:
Code:
SCHID1.00,Leistung,Steckdose1,>,5.000,0,SCHID2.00
SCHID2.00,Temperatur,Steckdose1,<,20.000,0,SCHID3.00,Steckdose2,1
SCHID3.00,Leistung,Steckdose4,>,2000.000,0,SCHID4.00,Steckdose3,1
SCHID4.00,Leistung,Steckdose4,<,15000.000,0,SCHID5.00,Steckdose3,0
SCHID5.00,Temperatur,Steckdose1,>,24.000,0,SCHID6.00,Steckdose3,0
SCHID6.00,Temperatur,Steckdose1,>,24.000,0,SCHID0.00,Steckdose2,0

edit: sensor 1 war falsch in der Beschreibung sollte S-Dose 2 sein.
 
Zuletzt bearbeitet:
Das kann man noch entflechten, moment:
Kurze Frage, was ist Sensor 1? Wir können als Aktion ja nur Schaltsteckdosen an und aus schalten. ;)

Ansonsten schreibe ich das später noch um. Ketten beginnen mit .00
Kettenglieder dann mit .01, .02 usw. aber das ist erstmal zweitrangig. Ich denke, da baue ich ohnehin noch etwas die Logik um. Vielleicht muss es nicht so kompliziert sein, aber das muss ich mir erst wenn wir verschiedene Sezarien durchprobiert haben, nochmal ansehen und vereinfachen. Dient jetzt einfach mal als Konstrukt. (Ich glaube, dafür muss ich ohnehin smarthomeautopro.php schreiben. Die alte smarthomeauto.php aufzubohren wird ohnehin nicht reichen. :)

"Die Heizung soll unter einer bestimmten Temperatur angehen, aber nur wenn sie im Zimmer ist (Indikator ist die
Schreibtischlampe, wenn die Sonne noch scheint geht es schneller dann wird PV-Strom benutzt)"

S-Dose 1 wird temperatur gemessen und Tischbeleuchtung hängt dran
S-Dose 2 hängt eine Infrarot Flächenheizung dran
S-Dose 3 hängt ein Heizlüfter dran
S-Dose 4 ermittelt die leistung an der PV Ankage

Szenario: Arbeitszimmer warm
1) Wenn Temperatur Steckdose1 < 20 Grad und Steckdose 2 Flächenheizung ist schon an? > 5 Watt dann Sensor 1 ein Sensor 1 ist welche Steckdose?
2) Wenn Leistung Steckdose 3 > 2000 Watt dann auch noch den Heizlüfter einschalten Heizlüfter hängt an 3. Wenn >2000 Watt gemessen, ist die Dose eh an
2) Wenn Temperatur Steckdose 1 > 24 Grad Steckdose 1 aus Tischlampe aus, aber wozu ohne weitere Schaltungen passiert dann nichts.

Irgendwie komme ich da noch nicht ganz klar. Hm, müsste eher heißen:
1) Wenn Temperatur Steckdose1<20 Grad und Steckdose1 an (Lampe wurde eingeschaltet, Raum wurde betreten) Steckdose2 an (Flächenheizung an, würde für mich Sinn machen)
2) Wenn Leistung Steckdose4 (PV-Anlage vermute ich mal) >2000 Watt und Steckdose2 an, dann Steckdose3 an (Heizlüfter zuschalten)
2a) Wenn Leistung Steckdose4 (PV-Anlage vermute ich mal) <15000 Watt, dann Steckdose3 aus (Heizlüfter abschalten, Steckdose2 muss hier nicht geprüft werden)
---->3) Wenn Temperatur Steckdose1>24 Grad, dann Steckdose1 aus (bewirkt automatisch dann Heizung komplett aus, aber Frau sitzt im Dunkeln)
besser 3) Wenn Temperatur Steckdose1>24 Grad, dann Steckdose2 aus (Flächenheizung aus)
und 3a) Wenn Temperatur Steckdose1>24 Grad, dann Steckdose3 aus (Heizlüfter aus, Sicherheitsschaltung, egal ob vorher an oder aus)
(Wenn Sie noch im Raum ist, brennt noch die Tischlampe und somit wird 1) geprüft und bei unter 20 Grad ja wieder geheizt)
4) Wenn Schaltstatus Steckdose1 ist aus, dann Steckdose2 aus (Raum verlassen, Flächenheizung aus)
5) Wenn Schaltstatus Steckdose1 ist aus, dann Steckdose3 aus (Raum verlassen, Heizlüfter aus, Sicherheitsschaltung, egal ob vorher an oder aus)

Nur in 1) und 2) wäre hier eine Kette nötig, die restlichen sind durch Einzel-Schaltvorgänge regelbar.

Schau dir das bitte nochmal an, da ist irgendwie ein Logikfehler oben in deinem Szenario... oder ich hab das falsch verstanden... :gruebel:
 
Zuletzt bearbeitet:
war spät gestern ... ich schreibe es mal anders, aber Du hast Recht, keep it simple, aber um die Szenarie nicht zu einfach zu machen noch ein kleiner Zusatz, ich will ja das es meiner Frau gefällt ;)

Die Nummer beschreibt immer den Sensor, also ist S-Dose1 und S-Temp1 das gleiche Gerät!

Def:
S-Dose1: Tischlampe
S-Temp1: Temperaturfühler
S-Dose2: Flächenheizung
S-Dose3: Heizlüfter
S-Leist4: zur Ermittlung der aktuellen PV-Leistung

Logik
-
1) Wenn S-Temp1<20 Grad und S-Dose1 an (Lampe wurde eingeschaltet, Raum wurde betreten) S-Dose2 an
2) Wenn S-Dose1 an und S-Temp1 < 14 Grad S-Dose2 an
3) Wenn S-Leist4 > 2000 Watt und S-Dose1 an und S-Temp1 < 24 Grad, dann S-Dose3 an (Heizlüfter zuschalten) - hier darf nicht eingeschaltet werden wenn es schon warm ist !!!!
4) Wenn Leistung S-Dose4 <15000 Watt, dann S-Dose3 aus

- Sicherheitsschaltung würde ich immer am Ende der kette machen, also alle Prüfungen die zum Ausschalten führen sollen!
10) Wenn S-Dose1 aus dann S-Dose 2 & 3 aus
10) Wenn S-Temp1>24 Grad, dann S-Dose 2 & 3 aus


nicht ganz einfach ...
 
Zuletzt bearbeitet:
Funktioniert bei mir problemlos.

smarthome.php?ain=0123456&schalter=toggle und auch
smarthome.php?name=FX-Dose&schalter=toggle

Kommt im Browser eine 0 oder 1 auf weißem Grund und sonst nichts oder alles leer? Wenn alles leer, dann wurde die AIN nicht gefunden. bzw. ist falsch oder falsch geschrieben (z. B. Zahlendreher).

Nachtrag: Probiere mal auch mit an und aus, statt toggle, ob das geht. Klappt das auch nicht, prüfe nochmal die AIN oder versuche es mit dem Gerätenamen: z. B.: smarthome.php?name=FX-Dose&schalter=toggle

Also bei mir kommt nur eine weiße Seite.
Ändere ich nur das Wort in an oder aus klappt alles wie gewünscht.

Noch eine Idee:
In den Einstellungen eine Checkbox wo man eine Log ein bzw. ausschalten kann.
In diese Log (txt Datei) werden alle Schaltereignisse gespeichert.
Sinnvoll wenn man nicht zu Hause ist, und im nachhinein wissen will ob ein Gerät geschaltet wurde.
 
hab da noch einige Ideen zum schalten.

1. Außenbeleuchtung soll von 6:00 - 22:00 brennen wenn es Dunkel ist.

Morgens 6:00 einschalten, wenn vor Sonnenaufgang,
Sonnenaufgang ausschalten,
Abends Sonnenuntergang einschalten, wenn vor 22:00
22:00 ausschalten, wenn nach Sonnenuntergang.

2. Mein Sat-Multischalter ist ein Stromfresser! ca. 30 Watt

meine Idee, alle Fernseher (bis zu 4 Stück) und Sat-Multischalter an Dect!200
Prüfen wenn alle Fernsehsteckdosen Verbrauch unter 5 Watt, dann Sat-Multischalter aus.
wenn eine Fernsehsteckdose Verbrauch größer als 5 Watt, dann Multischalter ein.

muss ich noch viele Steckdosen kaufen!!

andere Idee:
ist es möglich, das das Script nach einem Ereignis ein analoges Telefon klingeln lassen kann ?

Grund: AVM hat ja keine weiteren Aktoren, über Telefon klingeln könnte ich mit viel bastelarbeit z.B. mit Relais SAR4 verschiedene Sachen steuern.
Mögliche Sachen Wären da, Türöffner, Garagentor, Heizungssteuerung oder ganz wichtig Rolladensteuerung.
 
andere Idee:
ist es möglich, das das Script nach einem Ereignis ein analoges Telefon klingeln lassen kann ?

Grund: AVM hat ja keine weiteren Aktoren, über Telefon klingeln könnte ich mit viel bastelarbeit z.B. mit Relais SAR4 verschiedene Sachen steuern.
Mögliche Sachen Wären da, Türöffner, Garagentor, Heizungssteuerung oder ganz wichtig Rolladensteuerung.

http://www.wehavemorefun.de/fritzbox/Skript_zum_Wählen
http://www.wehavemorefun.de/fritzbox/Erweitertes_Wählskript
 
@HarryHase: Schau ich mir später mal in Ruhe an und poste dann was.

@dtrieb: Das ist mir irgendwie ein Rätsel. Nenne mir doch nochmal kurz deine aktuelle Version, da schaue ich dann explizit nach. Ein log-File merke ich mir mal vor.

@ws65: Die Szenarien nehme ich mit auf. Das mit dem analogen Telefon oder wie auch schon E-Mail-Versandt lasse ich mal außen vor, bis erstmal die Grundlogik passt und funktioniert. Könnte man später über "Pseudo-Aktoren" steuern oder besser als Aktion "ein PHP-Script ausführen" und da kann dann rein, was immer man haben will. Aber das wäre dann die nächste Baustelle :)
 
Zuletzt bearbeitet:
@harryhase: Schau ich mir später mal in ruhe an und poste dann was.

@dtrieb: Das ist mir irgendwie ein rätsel. Nenne mir doch nochmal kurz deine aktuelle version, da schaue ich dann explizit nach. Ein log-file merke ich mir mal vor.

v 4.03.4759
 
war spät gestern ... ich schreibe es mal anders, aber Du hast Recht, keep it simple, aber um die Szenarie nicht zu einfach zu machen noch ein kleiner Zusatz, ich will ja das es meiner Frau gefällt ;)

Die Nummer beschreibt immer den Sensor, also ist S-Dose1 und S-Temp1 das gleiche Gerät!

Def:
Gerät1: S-Dose1: Tischlampe
Gerät1: S-Temp1: Temperaturfühler
Gerät2: S-Dose2: Flächenheizung
Gerät3: S-Dose3: Heizlüfter
Gerät4: S-Leist4: zur Ermittlung der aktuellen PV-Leistung

Logik
-
1) Wenn S-Temp1<20 Grad und S-Dose1 an (Lampe wurde eingeschaltet, Raum wurde betreten) S-Dose2 an
2) Wenn S-Dose1 an und S-Temp1 < 14 Grad S-Dose2 an Das ist überflüssig, es sei denn, es soll generell die Temp nicht unter 14 Grad ob Dose1 an oder aus. Ich nehm das jetzt einfach mal an.
3) Wenn S-Leist4 > 2000 Watt und S-Dose1 an und S-Temp1 < 24 Grad, dann S-Dose3 an (Heizlüfter zuschalten) - hier darf nicht eingeschaltet werden wenn es schon warm ist !!!!
4) Wenn Leistung S-Dose4 <15000 Watt, dann S-Dose3 aus
- Sicherheitsschaltung würde ich immer am Ende der kette machen, also alle Prüfungen die zum Ausschalten führen sollen!
10) Wenn S-Dose1 aus dann S-Dose 2 & 3 aus
10) Wenn S-Temp1>24 Grad, dann S-Dose 2 & 3 aus
nicht ganz einfach ...
Nur kurz zur Definition: Schaltketten sind 1 und 3, der Rest sind Einzelschaltungen und stehen schalttechnisch in keinem Bezug zu anderen Schaltungen, sondern nur über ihre erfüllten Bedingungen. Deswegen ist es für das Schaltsript vollkommen egal, wo was steht. Nur zum besseren Verständnis für uns ists einfacher, es so aufzulisten.

Das wäre es in Script-Schaltlogik umgesetzt:
Code:
SCHID1.00,Temperatur,Gerät1,<,20.0,0,SCHID1.01
SCHID1.01,Schalterposition,Gerät1,1,1,0,SCHID0.00,Gerät2,1
SCHID2.00,Temperatur,Gerät1,<,14.0,0,SCHID0,00,Gerät2,1
SCHID3.00,Leistung,Gerät4,>,2000.000,0,SCHID3.01
SCHID3.01,Schalterposition,Gerät1,1,1,0,SCHID3.02
SCHID3.02,Temperatur,Gerät1,<,24.0,0,SCHID0,00,Gerät3,1
SCHID4.00,Leistung,Gerät4,<,15000.000,0,SCHID0.00,Gerät3,0
SCHID5.00,Schalterposition,Gerät1,1,0,0,SCHID0.00,Gerät2,0
SCHID6.00,Schalterposition,Gerät1,1,0,0,SCHID0.00,Gerät3,0

Nachtrag: Hab das bestehende alte Format aufgebohrt:
Code:
K,T,<,20,Gerät1,016,015,0
+1,S,1,1,Gerät1,Gerät2,016,0
1,T,<,14,Gerät1,Gerät2,017,0
K,W,>,2000,Gerät4,019,018,0
+,S,1,1,Gerät1,020,019,0
+1,T,<,24,Gerät1,Gerät3,020,0
0,W,<,15000,Gerät4,Gerät3,021,0
0,S,1,0,Gerät1,Gerät2,022,0
0,S,1,0,Gerät1,Gerät3,023,0,

Die neuen Felder hintenraus: Wenn Kette, dann Kettenfolgegliednummer SCHID, aktuelle SCHID, delay Zeit in Minuten


K startet eine Kette,
+ ohne Wert Kettenmittelglied mit Bedingung ohne Schalten
+ mit Wert Kettenendglied mit Bedingung und Schaltfunktion

Das Ganze nimmt langsam Gestalt an. Umsetzung müsste so realisierbar sein.
 
Zuletzt bearbeitet:
@dtrieb: Das ist definitiv in der Version drin. Welche Fritzbox-FW hast du?
 
Hallo,
bzgl. meines letzten Posts (#204):
Es wird eine Fehlermeldung gegeben, die besagt, dass Zeile 115 der "smarthomeupdate.php" nicht verarbeitet werden kann: "$ch = curl_init();"
Als portablen Server habe ich einmal den von Dir vorgeschlagenen genutzt (wollte absolut nicht) und diesen hier. Hast Du einmal die komplette Version als ZIP für mich?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.