Daily Deal --- Smarter 1,8 l iKettle (Wasserkocker)

Hallo zusammen,

ich bin grad über den hier gestolpert: Smarter 1,8 l iKettle (Wasserkocher)
http://smarter.am/ikettle-1.0/

ICH habe mir einen geordert. :wink:
Mal sehen wie der sich in IPS integerieren lässt.

Infos:
iKettle 1.0 - Smarter.am
iKettle: Der smarte Wasserkocher kocht… auch nur mit Wasser. Der Test! › neuerdings

Es gibt mittlerweile einen Nachfolger:
iKettle 2.0 - Smarter.am

Und eine Kaffeemaschine:
Coffee - Smarter.am

Eben noch gefunden - PHP Code um iKettle zu steuern:
loftdigital/PhiKettle · GitHub
Mark J Cox : Hacking a Wifi Kettle

Grüße,
Chris

SUPER! Vielen Dank, Bayaro.

Soo, der Wasserkocher ist nun endlich angekommen. Und er macht auf den ersten Blick einen guten Eindruck.
Probleme machte es, ihn ins heimische WLAN zu integrieren. Eigentlich sollte das aus der App heraus funktionieren … ging aber irgendwie nicht. Ich nutze die meiste Zeit entweder ein Nexus 7 (2013) mit Android 6.0.1 oder ein Nexus 5 mit Android 6.0.1. Per Direktverbindung (AdHoc) funktionierte es spitze, allerdings sollte das Dingelchen ja ins Hausnetzwerk.
Nach viel hin und her war der Fehler gefunden; Android 6.x :eek::mad:
Mein Versuch es mal mit einem älteren Android 5 zu versuchen mündeten schließlich in Erfolg.

Ich habe nun schnell mal einen Client Socket in IPS angelegt und den Debugmodul aktiviert. Dann mal ein wenig am Gerät bedient.
Und siehe da:


Nun möchte ich die Werte in einer Variablen ablegen, aber wie?
Es gibt keine RegisterVars mehr. :frowning:

Wieso gibt es keine Register Variablen mehr?

INSTANZ hinzufügen --> Sonstiges --> Register Variable…

oder

INSTANZ hinzufügen --> ins Suchfeld „Reg“ eingeben und Register Variable auswählen…

Geht in der 3.4 und der 4.0!

Gruß,
Peter

Stimmt … im „IP-Symcon“ Standort geht das (gerade geprüft, weil nicht gewusst).
Früher konnte man das direkt unter die I/O Instanz binden.

Client Socket iKettle -> RegVar

Irgendwie habe ich einen Knoten im Kopf …

// iKettle AN
if ($IPS_VALUE == "sys status 0x5")
{
SetValue (43644 /*[EG\Küche\iKettle\Zustand]*/ , true);
}
// iKettle AUS
if ($IPS_VALUE == "sys status 0x0")
{
SetValue (43644 /*[EG\Küche\iKettle\Zustand]*/ , false);
}

… getriggert wird es durch genannte RegVar. Allerdings wird nicht geschaltet zwischen an und aus.
Jemand einen zielführenden Hinweis für mich?

Warum machst Du es nicht wie hier beschrieben?

RegisterVariable — IP-Symcon :: Automatisierungssoftware

Ausserdem sollte es $_IPS[‚VALUE‘] heissen…

Peter

Das bringt mich leider nicht wirklich weiter. Es ist ja so: jedesmal, wenn per Client Socket ein Datensatz kommt, dann springt ebenfalls die RegVar an und diese wiederum startet das Script. In diesem Script soll dann der Datensatz als String ausgewertet werden und entsprechend andere Variablen setzen.
Konkret bedeutet das: ich drücke am Gerät einen Knopf und per Netzwerk erfahre ich "wurde eingeschaltet (sys status 0x5) und es wurde Temperatur 100 °C gewählt (sys status 0x100). Dies geschieht im Zeitversatz von ~ 1 Sekunde. Das Script wird also zweimal hintereinander gestartet. Aber wie bekomme ich die Auswertung hin?

Versuch es mal als …



#debug
IPS_LogMessage(" REGVAR-SKRIPT", $_IPS['VALUE']);

switch $_IPS['VALUE']
{
   case "sys status 0x5":
      SetValue (43644 /*[EG\Küche\iKettle\Zustand]*/ , true); 
  break;

  case "sys status 0x0":
      /SetValue (43644 /*[EG\Küche\iKettle\Zustand]*/ , false); 
  break;

 case "sys status 0x100":
      echo "100°C gewählt"; 
  break;

 case "sys status 0x94":
      echo "95°C gewählt"; 
  break;

 default:
  echo " nix passendes gefunden!"
 break;

}


Dennoch verstehe ich dein Problem nicht. Es ist doch genau die Aufgabe das das Skript beim Datenempfang ausgeführt werden soll. Also wenn kurz hintereinander Daten kommen, wird es eben auch 2 x ausgeführt. Versteh ich nicht…
Der Debug ist da um zu schauen ob und wie die Daten kommen.

Das wird auch nicht gehen :slight_smile:
Weil das letzte Zeichen (Trennzeichen) fehlt.
Der sichtbare Text im Debug sind immer einer weniger als unter Länge angegeben.
Also einmal im Debug auf Hex umstellen und dann das Trennzeichen (vermutlich chr(13) ) mit in den Vergleich aufnehmen.
Michael

… wo wie wieder hier wären…

RegisterVariable — IP-Symcon :: Automatisierungssoftware

Wobei das vermutlich nicht benötigt wird. Ist die Frage wie schnell die Daten reinkommen.
Laut dem Debug reicht da auch der einfache Vergleich.
Ganz quick & dirty einfach mit trim den Rest entfernen
if (trim($_IPS[‚VALUE‘]) == …

Ganz einfach und doch sehr sicher kann man es auch machen.
Das bisherige Script nutzen und zwischen IO und RegVar noch einen Cutter legen mit rechtes Trennzeichen auf (was auch immer das letzte Zeichen ist).
Dann wird immer pro Datensatz einmal die RegVar getriggert und das Trennzeichen wird auch automatisch entfernt.
Michael

Ok … ich habe das Script leicht angepasst (flogen Fehler):

<?

#debug
IPS_LogMessage(" REGVAR-SKRIPT", $_IPS['VALUE']);

switch ($_IPS['VALUE'])
{
   case "sys status 0x5":
      SetValue (43644 /*[EG\Küche\iKettle\Zustand]*/ , true);
  break;

  case "sys status 0x0":
      SetValue (43644 /*[EG\Küche\iKettle\Zustand]*/ , false);
  break;

 case "sys status 0x100":
      echo "100°C gewählt";
  break;

 case "sys status 0x95":
      echo "95°C gewählt";
  break;

 default:
  echo " nix passendes gefunden!";
 break;

}

?>

Die Ausgabe lautet: " nix passendes gefunden!"
Und genau da ist meines Erachtens der Hase begraben.

Und die Lösungen stehen weiter oben :smiley:
Musst nur mal das Trennzeichen raus suchen :wink:
Michael

Und genau das war die Lösung! Ich hatte den Cutter zwar schon, aber per bypass überbrückt.
Nun komme ich weiter. 1000 Dank!

Ich habe nun alle Möglichkeiten ausgeschöpft Informationen abzubilden (auslesen; also Statusmeldungen münden in Variablen->Visualisierung). Toll!
Kann mir jemand sagen, wie ich ein statement aus IPS heraus gegen einen ClientSocket verschicken kann (Befehl abschicken)? Ich möchte also ein „set sys output 0x4“ gegen 192.168.x.y:2000 verschicken. Wenn ich das per putty mache, dann funktioniert das schon mal spitze! Vielen Dank im Voraus.

Schau Dir mal das Beispiel an: IP-Symcon - Wie kann ich… 2.0 - Seite 4
Daraus sollte sich das was Du brauchst ableiten lassen.

Ihm geht es um einen Socket…da wäre hier etwas zum Abschauen :slight_smile:
Arduino über LAN in IPS einbinden (2-Wege Kommunikation)

Grüße,
Chris

Da wir nicht wissen wie der ClientSocket konfiguriert ist… können wir nur raten.
Eventuell geht auch ganz simpel RegVar_SendText — IP-Symcon :: Automatisierungssoftware
Michael