Plugwise ohne Server direkt auslesen/schalten

So, Fehler gefunden.

Wie sagt Boyscout immer (Hallo Markus ;)): das Problem sitzt vor dem PC.
Ich habe nun den Stecker aus der Dose genommen, einen Blick auf den ID-Aufkleber geworfen und schlichtweg nur die richtige Adresse verwendet. Kaum macht man es richtig, schon gehts. :smiley:

Ich bin wohl schon zu lange dran oder einfach nur betriebsblind. :rolleyes:

Nochmals vielen Dank an alle in diesem tollen Forum - sehr gute Arbeit und ohne Euch wäre ich nicht so weit gekommen.

Nun kümmere ich mich ums Auswerte-Script und die Verbrauchsmessung. … Ab Morgen mit frischem Hirn.

Viele Grüße aus dem Unterallgäu
Harry

Hallo Harry,

ich habe jetzt schon seit ein Pasr Wochen mein Skript um Gesamtverbrauch erweitert. Werde es hoffentlich am WE hier Online stellen.

Über 18 könnte man ja sogar eine Art Installer für Circles realisieren. Sehr interessant!

Danke & Gruß, Axel

Hallo Axel,

ich habe gestern mit dem Befehl 0018 getestet und grundsätzlich sollte es ja so sein, dass mit einer Node-ID zw. 00 und 3F die im Netz bekannten Circles oder FFFFFF zurückgemeldet werden. Bei mir kommen leider nur 25 meiner 28 Circles als 0019-Antwort - keine Ahnung warum die drei stumm bleiben?

Auch habe ich den Effekt, dass im Buffer der Registervariable ein Art Zeilenumbruch drin ist und manchmal statt der erwarteten Bufferlänge die RegVar zweimal reagiert. Um Fehlinterpretation zu vermeiden prüfe ich vor Auswertung des Buffer die korrekte Länge zur jeweiligen Antwort. In Summe würde die Antwortsequenz wieder passen, aber wie soll man das ordentlich auswerten. Kann man das Timing der Registervariable irgendwie beieinflussen? Oder liegt es am COM-Port?

Mit PlugwiseSource scheint mein Netz absolut stabil zu sein.

Auch kommen nicht immer Antworten auf gesendete Befehle - ca. jede zehnte Anfrage bringt keine Antwort.

Bei Bedarf kann ich ja meine Skripte mal posten, aber von der grundsätzlichen Idee basieren Sie auf Deiner Version 0.2.

Letzte Woche habe ich drei neue Circles in Betrieb genommen und nachdem ich sie zunächst nicht in mein Netz gebracht habe, hatte ich in München bei Plugwise angerufen. Man hat mir ein PDF mit einer neuen geänderten Reset-Anleitung gemailt und nach dem Rücksetzen der Circles lief alles wie gewohnt und die Circles gingen ins Netz. Exzellente Unterstützung von Plugwise!

Wer Bedarf hat sendet mir bitte seine Email-Adresse und ich verschicke schnellstmöglich das PDF direkt - hier hochladen möchte ich es nicht.

Viele Grüß aus dem Unterallgäu
Harry

Hallo zusammen,

ich habe einen Fehler bei mir gefunden:
Die Registervariable muss natürlich auf die Cutter-Instanz zeigen und nicht auf den SerialPort.:smiley:

Später mehr.

Viel Grüße aus dem Unterallgäu
Harry

Hallo zusammen,

mein 0018-Problem ist scheinbar gelöst. Ich habe die Circles die nicht erkannt wurden aus dem Netzwerk entfernt, einen Reset ausgeführt und mit PlugwiseSource wieder angemeldet. Nun werden bis auf den Circle+ alle 27 Module erkannt. Auch die „verstümmelten“ RegVar-Meldungen sind weg, das war der falsche RegVar-Link (SerPort statt Cutter). :rolleyes:

Lediglich die Node-ID = 57 bringt keine Antwort (sonst kommt die Circle-ID oder FFFFFF). Ist vieleicht die Circle±ID - egal so viele Circles werden es bei mir nicht. An den Circle+ traue ich mich nicht ran, denn wenn hier ein Reset ausgeführt wird, muss das komplette Netz neu aufgebaut werden. :eek: Da ich keinen Verbraucher am Circle+ habe und er zuverlässig ansprechbar ist, lasse ich die Finger davon.

Hallo Alex, kannst Du Deinen Circle+ über 0018 finden?

Nun geht es an das Auslesen der Pulse zum Berechnen des Verbrauchs.

Viele Grüße aus dem Unterallgäu
Harry

Hallo Harry, mein Circle+ verhält sich gegenüber IP-Symcon wie alle anderen.

Weis gerade nicht auswendig, ob der 0018 die Rolle abfragt. Wenn ja, dann muss dem Befehl doch die ID des Circle+ mitgegeben werden. Verstehe dann nicht was da abgefragt werden soll?

Hallo,

ich hatte den Befehl so erstanden, dass man die ID zw. 0 und 63 mit gibt

0018 000D6F0000 990865 00 bis 0018 000D6F0000 990865 3F

und dann alle im Netz vorhandenen Circles mit Ihrer Circle-ID gemeldet werden (oder FFFFFF falls die ID nicht vergeben).

Bei mir sind die IDs 0 bis 27 an die 28 Circles vergeben, lediglich der Circle+ scheint keine ID zu haben (oder es gibt eine Dublette im Netz?). Wie kann ich denn die ID eines Circle ermitteln? In PlugwiseSource habe ich da nichts gefunden und Maarten Damen beschreibt das leider nicht in seiner Doku.

Viele Grüße aus dem Unterallgäu
Harry

Hallo Harry,

der Circle+ ist zentraler bestandteil des Netzes - ohne ihn geht gar nichts! Die normalen Circles melden sich alle bei ihm an (nicht etwa dem Stick).

Den Circle+ kann man mit Befehl 0008 ermitteln. Als Antwort bekommt man 0000 <4-Stellige Sequenznummer> 00DD + MAC des Circle+.

Mit 0018 + MAC des CirclePlus + XY kann man dann die angeschlossenen Circles herausfinden.

Ich werde - wenn’s die Zeit zulässt - in mein Skript ein Installer einbauen (WE?).

Danke & Gruß,
Axel

Hallo zusammen

war im Urlaub und jetzt darf ich noch alles aufholen was im Urlaub halt so liegenbleibt :frowning:

Aber Ihr seid ja auch so gut Vorangekommen.

@Axel
Super das mit dem Installer für neue Circle.
Bin ich schon gespannt darauf.

@Harry

Den Circle+ kann ich auch nicht mit 0018 auslesen, wäre aber auch Sinnfrei da man ja eh schon die Circle+ Adresse braucht um die Circle+ Adressse abzufagen. :stuck_out_tongue:

Aber wie Axel schon schreibt bekommst Du mit 0008 die Adresse des Circle+.

Gruß Jannis

Hallo Jannis, hallo Axel,

danke für die Info, den 0008 kannte ich noch nicht. Die Doku von Maarten Damen ist wohl leider nicht komplett.

Folgende Befehle habe ich bisher ausprobiert:

0008 … Antwort 0000 00DD Get Circle+
0016 … Antwort 0000 00D7 (Bedeutung unklar) ???
0017 … 00 Antwort 0000 00DE Switch Device off
0017 … 01 Antwort 0000 00D8 Switch Device on

000A … Antwort 0011 Stick Initialization
0012 … Antwort 0013 Power Information Request
0018 … xx Antwort 0019 Role Call
0023 … Antwort 0024 Device Information Request
0026 … Antwort 0027 Calibration Request
0029 … Antwort 003A Date/Time ??? hier hätte ich 002A als Antwort erwartet)
003E … Antwort 003F Get Date/Time (letzte 6 Byte noch unklar)
0048 … Antwort 0049 Power Buffer Information (habe ich noch nicht implementiert)

Gibt es noch weitere? Ich möchte nicht einfach alles senden und etwas zerstören (Deine Warnung vor 0001 und 0004 ;)).

Viele Grüße aus dem Unterallgäu
Harry

Wegen dem 0016 Uhrzeitstellen Befehl siehe hier

Der 0001 Befehl löscht anscheinend die aktuelle NetzwerkID beim Stick und fragt beim Circle+ einen Neue an.
Der schickt darauf ein einen Vorschlag mit 0002, den man mit 0004 bestätigen kann. Damit hab ich mir damals ein neues Netzwerk aufgebaut und musste erst alle Circle zurücksetzen und sich beim Circle+ anmelden lassen.
Hab ich mit der Orginalsoftware gemacht, da ich nicht die Zeit hatte es anders auszuprobieren.
Die neuen bzw. zurückgesetzten Circle sollten sich aber selbständig beim Circle+ melden und dann mit 0007 01 + Macadresse des Circle hinzugefügt werden können. Ich hab zuhause eh gerade neu Circle, da werd ich heute abend mal mit den 0007 befehlen rumspielen.

Mit 0009 & MacAdresse des Circle & 00 kann man einen Circle vom Netzwerk trennen.
Funktioniert super, nur hab ich den Befehl zum weider ans Netzwerk anbinden noch nicht gefunden. :smiley: :rolleyes:

Gruß Jannis

Hallo Axel und alle anderen

So nachdem mich heute ein Circle mit einem falschen ID Aufkleber 2 Stunden gekostet hat(war nicht Vorort und hab mich gewundert warum der neue Circle nicht antwortet, ich aber dafür einen anderer Circle noch nicht angelegt habe), hab ich es geschafft einen neuen Circle anzulernen.

Wenn der Circle noch nicht mit dem Netzwerk verbunden war, kann man mit dem Befehl 000801 den noch nicht angelernten Circle zum Senden seiner ID bringen.

Antwort vom Circle ist 4-5 mal innerhalb von 7 Minuten ein 0006 und die MACid des Circle.

Jetzt kann man ihn mit 000701+MacId des Circle anlernen.

Danach ein paar Minuten warten und nocheinmal ein 000801 Senden.
Jetzt kommt ein 0061 und die Macadresse.
Schon ist der Circle Einsatzbereit.
Nun nicht vergessen die Uhrzeit mit 0016 zustellen und die Korrektur mit 0026 abzufragen.

Wenn der Circle schoneinmal im Netzwerk angemeldet war und nur ein Reset ausgeführt wurde langt anscheinend ein 000801 um den Circle wieder anzumelden. Er schickt daraufhin sofort ein 0061 und ist wieder im Netzwerk abrufbar.

Ich denke jetzt haben wir eigentlich alles um ohne Orginalsoftware auszukommen.

Gruß Jannis

So, hier die aktuellen Plugwise Skripte mit Autoinstaller und Gesamtverbrauch.

Updates
Version 0.6 vom 05.05.2012:

  • Gesamtverbrauch wird jetzt über Buffer ausgelesen (siehe Anleitung weiter unten)
  • es wird in allen Skripten durchgängig Idents verwendet
  • mehrere kleinere Bugs behoben
  • Variablentyp für LogAddress von String auf Integer umgestellt

Wer von Version 0.5 kommt, der muß alle Variablen LogAddress löschen - wird dann als Integer automatisch neu angelegt.

Version 0.5 vom 22.04.:

  • Typo bei Gesamtverbrauch korrigiert
  • Skripten .ips.php angehangen
  • Variable State in Status umbenannt
  • Variable Watt in Leistug umbenannt

Installation

Voraussetzungen:

  1. ein funktionierendes Plugwise Netzwerk, welches bspw. mit der mitgelieferten Software ‚Source‘ eingerichtet wurde.
  2. eingerichteter Serial Port (Baudrate 115200!)
  3. Cutter anlegen - linkes Trennzeichen „05 05 03 03“ (Hex), Rechtes 0D (Hex), Übergeordnete Instanz: Serial Port.
  4. installierter IPSInstaller - siehe http://www.ip-symcon.de/forum/f74/ipsinstaller-einige-hilfreiche-scripts-autom-installation-13228/

Installation:

  1. Struktur anlegen, also eine Kategorie für Plugwise (siehe Screenshot anbei)
  2. Skripts entpacken und in der Kategorie einbinden
  • die physischen Dateinamen dürfen nicht verändert werden, insb. „PW_Include.ips.php“
  • in PW_Include.ips.php in Zeile 5 muß noch die ID der RegVar angepaßt werden (welche in Schritt 7 angelegt wird)
  1. Registervariable anlegen, Zielskript: PW_Controller, Übergeordnete Instanz: Cutter

Tipp: man kann die Skripts jederzeit in eine andere Kategorie zum testen legen. Nur das Zielskript der Registervariable muß auf die entsprechende PW_Controller verweisen. Ich schiebe dazu einfach die Skripts und RegVar zwischen Test- und Produktiv-Umgebung hin- und her.

  1. Einmalig PW_Install ausführen

Jetzt wird pro gefundenes Circle eine (Dummy) Instanz mit allen Variablen angelegt. Die Fehler im Log kann man ignorieren, erscheinen in Folge nicht mehr.

Die Instanzen sind nach der MAC des Circles benannt und können jetzt nach Belieben umbenannt werden.

  1. Zyklisches Ereignis für PW_Controller anlegen, am besten minütlich auf x:xx:00. Wer nicht so oft abfragen möchte, aber Gesamtverbrauch ermitteln will, der muß zumindest ein stündliches Ereignis für x:59:00 anlegen (damit die LogAddress beim abfragen stimmt).

Damit wird Status und akt. Leistung der Circles abgefragt

  1. Zum Schalten am besten eine Struktur im Webfront (bzw. iOS) mit Links zu den Variablen Status anlegen. Ich hab das bei mir in Dummy-Instanzen logisch gruppiert (Küche, Heizen & Kühlen, Waschen etc.).

  2. Wer Variablen loggen möchte, der kann das pro Variable auf dem normalen Weg explizit einschalten. Gesamtverbrauch sollte Typ Zähler sein.

  3. Einmalig PW_SetTime ausführen, am besten durch Ereignis ein mal nächtlich ausführen.

Achtung: die Circles werden dadurch eine Minute vorgestellt. Damit legen die Circles die Werte schon vor der vollen Stunde in den Buffer ab und kann dort abgefragt und von IPS der richtigen Stunde zugeordnet werden.

Achtung 2: Die Source stellt die Uhrzeit wieder richtig. Nachdem man also Source gestartet hat, muß man wieder die Zeit eine Minute vorstellen.

  1. PW_ReadBuffer einbinden und stündliches Ereignis anlegen auf x:59:30.

Damit wird schlussendlich der Gesamtverbrauch abgefragt. Das Timing des Ereignis ist wichtig, sonst funktioniert es nicht!

Tipps:

Schalten per Skript geht so:

include("PW_Include.ips.php");
PW_SwitchMode(47610 /*[System\Plugwise\Circles\Drucker]*/, 1);

Ich habe drumherum noch einige Logik-Skripts (bspw. Drucker bei Druckauftrag einschalten und nach 15 Min. wieder ausschalten), Auswerte-Skripts (bspw. Waschmaschine fertig) und Tipps zur Visualisierung. Diese werde ich separat posten…

Noch zu lösende Probleme der Plugwise-Skripte:

  • Anlegen des Netzwerks immer noch mit der ‚Source‘ (hab keine Zeit zum testen)
  • Einbindung in IPSLibrary
  • Ablegen des Gesamtverbrauchs (Buffer-Werte) in externe Datenbank
  • Auswerten der Sequenznummer (Nice to have)

Ich hoffe ich hab an alles gedacht und wünsche euch viel Spaß beim testen!

Danke & Gruß,
Axel

PW-Empty.PNG

PW-Installed.PNG

Plugwise 0.6.zip (7.86 KB)

Anbei mein Meldeskript für Waschmaschine, Trockner und Spülmaschine. Es wird getriggert bei Grenzunterschreitung einer Variable, bspw. wenn der Trockner weniger als 2 Watt verbraucht. Es ist NICHT out-of-the-box nutzbar, da meine Meldungen über ein separates Skript laufen, welches die Prowl und Mails tatsächlich absendet. Es vermittelt aber hoffentlich den Eindruck, wie einfach es ist…

<?

	// PRINT "PW Melder - ".$IPS_VARIABLE.", Aktuell: ".$IPS_VALUE.", Alt: ".$IPS_OLDVALUE."
";

	include("Meldung");

	if ($IPS_VALUE < $IPS_OLDVALUE){

		Switch ($IPS_VARIABLE){
		   case 18092:
				Meldung ("Trockner","Der Trockner ist fertig");
		      break;
		   case 51424:
				Meldung ("Waschmaschine","Die Waschmaschine ist jetzt fertig");
		      break;
		   case 25004:
				Meldung ("Spülmaschine","Die Spülmaschine ist jetzt fertig");
		      break;
		   case 25595:
		      // print "TV wurde ausgeschaltet";
				SetValue(43007 /*[System\Windows Media Center\Media Center\TV Status]*/,False);
		      break;
		};
	};
	
?>

Hallo Axel,

Super-Arbeit - vielen Dank. :loveips:

Das Problem beim 0018 hatte ich auch: 3 Circle wurden einfach nicht gefunden.

Ich habe dann bei denen einen Reset durchgeführt und sie über PlugwiseSource neu eingebunden. Danach war alles ok - alle 27 Circles werden gefunden und die IDs korrekt angezeigt.

Ich vermute durch den zwischenzeitlichen Wechsel der Firmware bei den Crcles hat sich Source beim damaligen Einbinden der Module mit dem Zählen der IDs verschluckt? Oder IDs (00-3F) doppdelt vergeben. Die Frage ist auch, wo diese IDs verwaltet weren, vermutlich im Circle+. Nach meiner Recherche können die IDs aber nur zwischen 00 und 3F liegen? Wie kommst Du auf 100? 64 scheint mir zwar wenig für ein großes Plugwise-Netzwerk, aber immerhin eine typische Anzahl da 2er-Potenz.

Deine Skripte werde ich nächste Woche nochmals genauer studieren, aktuell kämpfe ich bei mir noch mit dem korrekten Berechnen des Verbrauchs. Ich habe das mit den Kalibirierungsparametern noch nicht ganz verstanden (will es aber mit Euren Infos selbst raus kriegen:rolleyes:).

Müssen die Kalibrierungs-Parameter einmalig ausgelesen werden oder regelmäßig? Ich vermute nur einmal nach Inbetriebnahme.

Auch habe ich mir die „plugwise.mdb“ mal in Access angesehen, da stehen Gaina, Gainb usw. auch als Felder drin, allerdings keine aktuellen Werte. :confused: Hier hätte ich erwartet, dass PlugwiseSource bei jeden Benutzung die Datenbank aktualisiert. Da werde ich noch etwas forschen - allerdings erst ab Montag.

Schönes Wochenende
Viele Grüße aus dem Unterallgäu
Harry

Für den aktuellen Verbrauch und Gesamtverbrauch hab ich jeweils eine Kategorie angelegt. Darunter dann durch Dummy Instanzen die Circles logisch gruppiert und verlinkt.

Die Kategorie hab ich sowohl ins WebFront, als auch iFront verlinkt.

Beim aktuellen Verbrauch rechne ich den Bereichsverbrauch mit folgendem Skript zusammen:

<?

include("IPSInstaller.ips.php");

$idCatCircles = 27657 /*[System\Plugwise\Verbrauchskosten\Aktuell]*/;

foreach(IPS_GetChildrenIDs($idCatCircles) as $item){
	$id_info = IPS_GetObject($item);
	If (($id_info["ObjectType"]) == 1) {
		$Verbrauch = 0;
		for($i = 0; $i < sizeof($id_info["ChildrenIDs"]); ++$i) {
		   $id_link = IPS_GetObject($id_info["ChildrenIDs"][$i]);
		   if (($id_link["ObjectType"]) == 6){
	 			$Verbrauch = $Verbrauch + GetValue(IPS_GetLink($id_info["ChildrenIDs"][$i])["LinkChildID"]);
		   }
		}
		$myVar = CreateVariable("Vebrauch Bereich", 2, $item, 99, "~Watt.3680", 0, $Verbrauch); //~Electricity
		SetValue($myVar,$Verbrauch);
		IPS_SetHidden($myVar, True);
		$CatName = strstr(IPS_GetName($item), " (", true);
		If ($CatName == "") $CatName = IPS_GetName($item);
		$CatName = $CatName." (".$Verbrauch." Watt)";
		IPS_SetName($item,$CatName);
	}
}

?>

Das Skript kann entweder durch den üblicherweise zuletzt antwortenden Circle getriggert werden oder in PW_Controller in Zeile 41.

PW-Verbrauchskosten.PNG

Ich benutze Highcharts zur grafischen Visualisierung. Anbei mein Config-Skript. Hab jetzt keine Ahnung mit wieviel Aufwand das bei euch zum laufen gebracht werden kann, kann aber den Eindruck vermitteln, was man damit machen kann.

Aufbereitung der PIE-Daten ab Zeile 108 „// Aki Start PieDaten“.

Stromzähler, Gas- und Wasser kann man natürlich nicht mit Plugwise auslesen, aber wunderbar mit 1-Wire bzw. eHZ.

Jaja, am 17. hatte ich IPS-Probleme (CPU-Auslastung 100%)…

Highcharts_Config_Verbrauch.txt (12.9 KB)

Hallo Harry,

teste doch einfach mal meine Skripte in einer anderen Kategorie aus, Verbrauch etc. sind da schon drin. Wenn du es richtig machst, dann kommt sich das Skript mit deiner Produktivumgebung nicht in die Quere.

Circles müssen wohl nur einmalig kalibriert werden (gainA etc. stimmt bei in IPS und Access.mdb überein).

Probleme mit Befehl 0018 kann ich aus Zeitgründen nicht testen - bei mir ist ja in der produktivumgebung alles angelegt…

Danke & Gruß,
Axel

Guter Tipp, werde ich so machen. Danke für alles.

Gesendet von meinem HTC Desire mit Tapatalk 2

Hallo Axelp

Dein neues Script kam genau richtig, am Freitag stand bei mir nämlich ein Paket mit „Plugwise Home Basic“ vor der Tür. Am heutigen Regentag konnte ich endlich damit spielen.

Bis jetzt hat das aktuellste Script astrein funktioniert.
1000 Dank dafür.

Zwei Hinweise solltest in die Installationsanleitung noch aufnehmen:

  • Die ID von RegVar_Plugwise muß in Zeile 7 von PW_include angepaßt werden.
  • Die physische Dateiname von PW_Include muß unbedingt „PW_Include“ sein und nicht der IPS Standardname „xxxxx.ips.php“

Nochmals besten Dank. Bin IPS seitig halbwegs fit und werde versuchen auch das ein oder andere zum Plugwise Projekt beizutragen.

gruß
bb