<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Loungelizard</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Loungelizard"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Loungelizard"/>
	<updated>2026-04-03T22:20:49Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27988</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27988"/>
		<updated>2018-10-06T04:30:48Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: /* Readings auslesen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;token=%token% 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit dieser Definition wird als Standard-Anfrage die Statusabfrage nach dem Wasserstop gesendet. Diese wird zyklisch alle 300 Sekunden wiederholt. &lt;br /&gt;
Wem das nicht reicht, der kann den Zyklus herunter setzen oder auch nach anderen Standard-Werten abfragen. Wer das kontinuierliche Pollen vermeiden will, setzt den Wert auf 0.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings auslesen ==&lt;br /&gt;
Die Art der Anbindung liefert veränderter Readings nur, wenn man sie regelmäßig abfragt. Dazu habe ich dazu einen Timer aufgesetzt, der 1x am Tag die relevanten Werte abfragt. Das ist eigentlich nur wichtig, falls man ab und an doch noch über einen anderen Weg z.B. die Apps des Herstellers auf die JUDO zugreift und Wert verändert. Bei mir sieht das dann so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   COMMAND    get JUDO_iSoft SaltQuantity;&lt;br /&gt;
              get JUDO_iSoft SaltRange;&lt;br /&gt;
              get JUDO_iSoft WaterDaily;&lt;br /&gt;
              get JUDO_iSoft WaterTotal;&lt;br /&gt;
              get JUDO_iSoft WaterAverage;&lt;br /&gt;
              get JUDO_iSoft FlowRate;&lt;br /&gt;
              get JUDO_iSoft ResidualHardness;&lt;br /&gt;
&lt;br /&gt;
   DEF        *23:55:00 &lt;br /&gt;
              get JUDO_iSoft SaltQuantity;&lt;br /&gt;
              get JUDO_iSoft SaltRange;&lt;br /&gt;
              get JUDO_iSoft WaterDaily;&lt;br /&gt;
              get JUDO_iSoft WaterTotal;&lt;br /&gt;
              get JUDO_iSoft WaterAverage;&lt;br /&gt;
              get JUDO_iSoft FlowRate;&lt;br /&gt;
              get JUDO_iSoft ResidualHardness;&lt;br /&gt;
 NAME       at_Judo_DailyStats&lt;br /&gt;
   NR         1595&lt;br /&gt;
   PERIODIC   yes&lt;br /&gt;
   RELATIVE   no&lt;br /&gt;
   REP        -1&lt;br /&gt;
   STATE      Next: 23:55:00&lt;br /&gt;
   TIMESPEC   23:55:00&lt;br /&gt;
   TRIGGERTIME 1538862900&lt;br /&gt;
   TRIGGERTIME_FMT 2018-10-06 23:55:00&lt;br /&gt;
   TYPE       at&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-10-06 06:06:14   state           Next: 23:55:00&lt;br /&gt;
Attributes:&lt;br /&gt;
   room       ,00_Masterswitches,10_Räume-&amp;gt;UG-&amp;gt;Keller&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um 1x pro Stunde gegen Ende der vollen Stunde den Wasserbrauch der aktuellen Stunde abzugreifen setze ich einen weiteren Timer auf. Bei mir jeweils um :58 der aktuellen STunde.  Das ist natürlich nicht ganz exakt. Wenn sich die Uhr der Judo und von fhem auseinander driften bekommt man ggf. schon wieder den Wert der nächsten Stunde. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   CFGFN      &lt;br /&gt;
   COMMAND    get JUDO_iSoft WaterCurrent&lt;br /&gt;
   DEF        +*01:00:00 get JUDO_iSoft WaterCurrent&lt;br /&gt;
   NAME       at_Judo_HourlyStats&lt;br /&gt;
   NR         34559&lt;br /&gt;
   NTM        06:58:00&lt;br /&gt;
   PERIODIC   yes&lt;br /&gt;
   RELATIVE   yes&lt;br /&gt;
   REP        -1&lt;br /&gt;
   STATE      Next: 06:58:00&lt;br /&gt;
   TIMESPEC   01:00:00&lt;br /&gt;
   TRIGGERTIME 1538801880&lt;br /&gt;
   TRIGGERTIME_FMT 2018-10-06 06:58:00&lt;br /&gt;
   TYPE       at&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-10-06 06:20:53   state           Next: 06:58:00&lt;br /&gt;
Attributes:&lt;br /&gt;
   alignTime  00:58&lt;br /&gt;
   room       ,00_Masterswitches,10_Räume-&amp;gt;UG-&amp;gt;Keller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das Setzen des Härtegrades den spinner.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot judo 2.jpg|mini|Visualisierung der Judo im TabletUI|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
                            &amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                        data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
                                        data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
                                        data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
                                        data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
                                        data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
                                        data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
                                        data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
                                        class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                            &amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                        data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
                                        data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
                                        data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
                                        data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
                                        data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
                                        data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
                                        data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
                                        class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;/div&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
            &amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
                        data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
                        data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
                        data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
                        &lt;br /&gt;
                              &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
                                  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
                                  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
                                  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
                                  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
                          data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                          data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
                          data-color=&#039;none&#039;&lt;br /&gt;
                          data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
                          data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
                          data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
                          data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
                          &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
                                  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
                                  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
                                  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
                                  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                        &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
                        data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                        data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
                        data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
                        data-min=5&amp;quot;&lt;br /&gt;
                        data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
                        data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
                        data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
                        data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
                        data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
                        data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
                        data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
                        data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
                        class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
                        &lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;section&amp;gt; &lt;br /&gt;
            &amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
                  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
                  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
                  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
                  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
                  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
                  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
                  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
                  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
                  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
                  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
                  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
                  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
                  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27987</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27987"/>
		<updated>2018-10-06T04:28:14Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: HTML-Seite neu formatiert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;token=%token% 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit dieser Definition wird als Standard-Anfrage die Statusabfrage nach dem Wasserstop gesendet. Diese wird zyklisch alle 300 Sekunden wiederholt. &lt;br /&gt;
Wem das nicht reicht, der kann den Zyklus herunter setzen oder auch nach anderen Standard-Werten abfragen. Wer das kontinuierliche Pollen vermeiden will, setzt den Wert auf 0.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings auslesen ==&lt;br /&gt;
Da die Art der Anbindung nur angepasste Readings liefert, wenn man sie regelmäßig abfragt, habe ich dazu einen Timer aufgesetzt, der 1x am Tag die relevanten Werte abfragt. Das ist eigentlich nur wichtig, falls man ab und an doch noch über einen anderen Weg z.B. die Apps des Herstellers auf die JUDO zugreift und Wert verändert. Bei mir sieht das dann so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   COMMAND    get JUDO_iSoft SaltQuantity;&lt;br /&gt;
              get JUDO_iSoft SaltRange;&lt;br /&gt;
              get JUDO_iSoft WaterDaily;&lt;br /&gt;
              get JUDO_iSoft WaterTotal;&lt;br /&gt;
              get JUDO_iSoft WaterAverage;&lt;br /&gt;
              get JUDO_iSoft FlowRate;&lt;br /&gt;
              get JUDO_iSoft ResidualHardness;&lt;br /&gt;
&lt;br /&gt;
   DEF        *23:55:00 &lt;br /&gt;
              get JUDO_iSoft SaltQuantity;&lt;br /&gt;
              get JUDO_iSoft SaltRange;&lt;br /&gt;
              get JUDO_iSoft WaterDaily;&lt;br /&gt;
              get JUDO_iSoft WaterTotal;&lt;br /&gt;
              get JUDO_iSoft WaterAverage;&lt;br /&gt;
              get JUDO_iSoft FlowRate;&lt;br /&gt;
              get JUDO_iSoft ResidualHardness;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um 1x pro Stunde gegen Ende der vollen Stunde den Wasserbrauch der aktuellen Stunde abzugreifen setze ich einen weiteren Timer auf. Bei mir jewils um :58 der aktuellen STunde.  Das ist natürlich nicht ganz exakt. Wenn sich die Uhr der Judo und von fhem auseinander driften bekommt man ggf. schon wieder den Wert der nächsten Stunde. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   CFGFN      &lt;br /&gt;
   COMMAND    get JUDO_iSoft WaterCurrent&lt;br /&gt;
   DEF        +*01:00:00 get JUDO_iSoft WaterCurrent&lt;br /&gt;
   NAME       at_Judo_HourlyStats&lt;br /&gt;
   NR         34559&lt;br /&gt;
   NTM        06:58:00&lt;br /&gt;
   PERIODIC   yes&lt;br /&gt;
   RELATIVE   yes&lt;br /&gt;
   REP        -1&lt;br /&gt;
   STATE      Next: 06:58:00&lt;br /&gt;
   TIMESPEC   01:00:00&lt;br /&gt;
   TRIGGERTIME 1538801880&lt;br /&gt;
   TRIGGERTIME_FMT 2018-10-06 06:58:00&lt;br /&gt;
   TYPE       at&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-10-06 06:20:53   state           Next: 06:58:00&lt;br /&gt;
Attributes:&lt;br /&gt;
   alignTime  00:58&lt;br /&gt;
   room       ,00_Masterswitches,10_Räume-&amp;gt;UG-&amp;gt;Keller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das Setzen des Härtegrades den spinner.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot judo 2.jpg|mini|Visualisierung der Judo im TabletUI|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
                            &amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                        data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
                                        data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
                                        data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
                                        data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
                                        data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
                                        data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
                                        data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
                                        class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                            &amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                        data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
                                        data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
                                        data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
                                        data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
                                        data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
                                        data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
                                        data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
                                        class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;/div&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
            &amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
                        data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
                        data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
                        data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
                        &lt;br /&gt;
                              &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
                                  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
                                  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
                                  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
                                  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
                &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
                          data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                          data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
                          data-color=&#039;none&#039;&lt;br /&gt;
                          data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
                          data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
                          data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
                          data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
                          &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
                                  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
                                  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
                                  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
                                  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                                  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
                        &lt;br /&gt;
                &amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
                    &amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
                        data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                        data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
                        data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
                        data-min=5&amp;quot;&lt;br /&gt;
                        data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
                        data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
                        data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
                        data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
                        data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
                        data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
                        data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
                        data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
            &lt;br /&gt;
                        class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
                        &lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
        &amp;lt;section&amp;gt; &lt;br /&gt;
            &amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
                  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
                  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
                  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
                  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
                  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
                  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
                  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
                  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
                  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
                  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
                  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
                  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
                  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
                  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;/section&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/div&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27986</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27986"/>
		<updated>2018-10-06T04:24:31Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Timer  ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;token=%token% 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit dieser Definition wird als Standard-Anfrage die Statusabfrage nach dem Wasserstop gesendet. Diese wird zyklisch alle 300 Sekunden wiederholt. &lt;br /&gt;
Wem das nicht reicht, der kann den Zyklus herunter setzen oder auch nach anderen Standard-Werten abfragen. Wer das kontinuierliche Pollen vermeiden will, setzt den Wert auf 0.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Readings auslesen ==&lt;br /&gt;
Da die Art der Anbindung nur angepasste Readings liefert, wenn man sie regelmäßig abfragt, habe ich dazu einen Timer aufgesetzt, der 1x am Tag die relevanten Werte abfragt. Das ist eigentlich nur wichtig, falls man ab und an doch noch über einen anderen Weg z.B. die Apps des Herstellers auf die JUDO zugreift und Wert verändert. Bei mir sieht das dann so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   COMMAND    get JUDO_iSoft SaltQuantity;&lt;br /&gt;
              get JUDO_iSoft SaltRange;&lt;br /&gt;
              get JUDO_iSoft WaterDaily;&lt;br /&gt;
              get JUDO_iSoft WaterTotal;&lt;br /&gt;
              get JUDO_iSoft WaterAverage;&lt;br /&gt;
              get JUDO_iSoft FlowRate;&lt;br /&gt;
              get JUDO_iSoft ResidualHardness;&lt;br /&gt;
&lt;br /&gt;
   DEF        *23:55:00 &lt;br /&gt;
              get JUDO_iSoft SaltQuantity;&lt;br /&gt;
              get JUDO_iSoft SaltRange;&lt;br /&gt;
              get JUDO_iSoft WaterDaily;&lt;br /&gt;
              get JUDO_iSoft WaterTotal;&lt;br /&gt;
              get JUDO_iSoft WaterAverage;&lt;br /&gt;
              get JUDO_iSoft FlowRate;&lt;br /&gt;
              get JUDO_iSoft ResidualHardness;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um 1x pro Stunde gegen Ende der vollen Stunde den Wasserbrauch der aktuellen Stunde abzugreifen setze ich einen weiteren Timer auf. Bei mir jewils um :58 der aktuellen STunde.  Das ist natürlich nicht ganz exakt. Wenn sich die Uhr der Judo und von fhem auseinander driften bekommt man ggf. schon wieder den Wert der nächsten Stunde. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Internals:&lt;br /&gt;
   CFGFN      &lt;br /&gt;
   COMMAND    get JUDO_iSoft WaterCurrent&lt;br /&gt;
   DEF        +*01:00:00 get JUDO_iSoft WaterCurrent&lt;br /&gt;
   NAME       at_Judo_HourlyStats&lt;br /&gt;
   NR         34559&lt;br /&gt;
   NTM        06:58:00&lt;br /&gt;
   PERIODIC   yes&lt;br /&gt;
   RELATIVE   yes&lt;br /&gt;
   REP        -1&lt;br /&gt;
   STATE      Next: 06:58:00&lt;br /&gt;
   TIMESPEC   01:00:00&lt;br /&gt;
   TRIGGERTIME 1538801880&lt;br /&gt;
   TRIGGERTIME_FMT 2018-10-06 06:58:00&lt;br /&gt;
   TYPE       at&lt;br /&gt;
   READINGS:&lt;br /&gt;
     2018-10-06 06:20:53   state           Next: 06:58:00&lt;br /&gt;
Attributes:&lt;br /&gt;
   alignTime  00:58&lt;br /&gt;
   room       ,00_Masterswitches,10_Räume-&amp;gt;UG-&amp;gt;Keller&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das Setzen des Härtegrades den spinner.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot judo 2.jpg|mini|Visualisierung der Judo im TabletUI|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
							&amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
										data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
										data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
										data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
											  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
										  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										  data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
										  data-color=&#039;none&#039;&lt;br /&gt;
										  data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
										  data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
										  data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
										  data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
										  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
												  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
										  &amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
										data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-min=5&amp;quot;&lt;br /&gt;
										data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
										data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
										data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
										data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
										data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
										data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
										data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
										data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
							&lt;br /&gt;
										class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;section&amp;gt; &lt;br /&gt;
							&amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
								  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
								  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
								  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
								  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
								  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
								  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
								  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
								  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
								  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
								  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
								  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
								  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
								  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/section&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;/div&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27985</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27985"/>
		<updated>2018-10-06T04:02:13Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: /* Einbindung in FHEM */  - Standard-Abfrage geändert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;token=%token% 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mit dieser Definition wird als Standard-Anfrage die Statusabfrage nach dem Wasserstop gesendet. Diese wird zyklisch alle 300 Sekunden wiederholt. &lt;br /&gt;
Wem das nicht reicht, der kann den Zyklus herunter setzen oder auch nach anderen Standard-Werten abfragen. Wer das kontinuierliche Pollen vermeiden will, setzt den Wert auf 0.&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das Setzen des Härtegrades den spinner.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot judo 2.jpg|mini|Visualisierung der Judo im TabletUI|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
							&amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
										data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
										data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
										data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
											  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
										  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										  data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
										  data-color=&#039;none&#039;&lt;br /&gt;
										  data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
										  data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
										  data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
										  data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
										  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
												  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
										  &amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
										data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-min=5&amp;quot;&lt;br /&gt;
										data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
										data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
										data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
										data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
										data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
										data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
										data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
										data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
							&lt;br /&gt;
										class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;section&amp;gt; &lt;br /&gt;
							&amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
								  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
								  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
								  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
								  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
								  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
								  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
								  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
								  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
								  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
								  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
								  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
								  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
								  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/section&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;/div&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27984</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27984"/>
		<updated>2018-10-05T22:20:04Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Neuer Screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das Setzen des Härtegrades den spinner.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Screenshot judo 2.jpg|mini|Visualisierung der Judo im TabletUI|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
							&amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
										data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
										data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
										data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
											  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
										  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										  data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
										  data-color=&#039;none&#039;&lt;br /&gt;
										  data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
										  data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
										  data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
										  data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
										  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
												  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
										  &amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
										data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-min=5&amp;quot;&lt;br /&gt;
										data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
										data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
										data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
										data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
										data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
										data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
										data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
										data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
							&lt;br /&gt;
										class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;section&amp;gt; &lt;br /&gt;
							&amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
								  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
								  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
								  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
								  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
								  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
								  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
								  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
								  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
								  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
								  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
								  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
								  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
								  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/section&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;/div&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Screenshot_judo_2.jpg&amp;diff=27983</id>
		<title>Datei:Screenshot judo 2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Screenshot_judo_2.jpg&amp;diff=27983"/>
		<updated>2018-10-05T22:18:40Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Visualisierung Tablet UI der Judo iSoft&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27982</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27982"/>
		<updated>2018-10-05T22:17:18Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: /* Darstellung in Tablet UI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das Setzen des Härtegrades den spinner.&lt;br /&gt;
[[Datei:Judo isoft plus tabletui.png|200px]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
							&amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
										data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
										data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
										data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
											  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
										  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										  data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
										  data-color=&#039;none&#039;&lt;br /&gt;
										  data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
										  data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
										  data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
										  data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
										  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
												  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
										  &amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
										data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-min=5&amp;quot;&lt;br /&gt;
										data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
										data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
										data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
										data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
										data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
										data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
										data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
										data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
							&lt;br /&gt;
										class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;section&amp;gt; &lt;br /&gt;
							&amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
								  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
								  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
								  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
								  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
								  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
								  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
								  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
								  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
								  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
								  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
								  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
								  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
								  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/section&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;/div&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27981</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=27981"/>
		<updated>2018-10-05T22:16:36Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Ergänzung von Kommandos zum Setzen von Werten und Auswertung in Statistiken, Tablet UI erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=Wasserenthärter&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get17Name  WaterDaily&lt;br /&gt;
attr JUDO_iSoft  get17URL   https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20daily&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft  get18Name  ValveState&lt;br /&gt;
attr JUDO_iSoft  get18URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=4&amp;amp;&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen einiger Werte werden die folgenden Kommandos zum Schließen und Öffnen des Wasserstopps sowie das Setzen der Wunschwasserhärte implementiert&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft  set01Name  CloseValve&lt;br /&gt;
attr JUDO_iSoft  set01URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=close&lt;br /&gt;
attr JUDO_iSoft  set02Name  OpenValve&lt;br /&gt;
attr JUDO_iSoft  set02URL   https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=open&lt;br /&gt;
attr JUDO_iSoft  set03Name  residual-hardness&lt;br /&gt;
attr JUDO_iSoft  set03URL   https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&amp;amp;parameter=$val&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Statistiken ==&lt;br /&gt;
Die iSoftPlus liefert verschiedene Statistiken zum Wasserverbrauch zurück. Die werden allerdings etwas eigentümlich zurückgemeldet.&lt;br /&gt;
Unter water-current ist der jeweilige Verbrauch je Stunde zusammengefasst. Ich hole kurz vor der vollen Stunde diesen Wert ab, damit er danach im Logfile landet.&lt;br /&gt;
Unter water-daily werden Tagesstatistiken geliefert. Kurioserweise in 3-Stunden-Paketen, d.h. 8 Werte. Die ersten Wert sind von 0h-3h, 3h-6h usw.&lt;br /&gt;
Ich habe mich aktuell darauf beschränkt, den stündlichen Verbrauch zu erfassen und zu protokollieren. Es lassen sich aber auch bei Bedarf detaillierte Datumsbezogene Statistiken abrufen. Ich habe noch keinen sinnvollen Weg gefunden, das mit fhem zu verbinden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das (noch nicht implementierte) Setzen des Härtegrades den spinner.&lt;br /&gt;
[[Datei:Judo isoft plus tabletui.png|200px]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;hbox&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;cell-50 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
											&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
														data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
														data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
														data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
														data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
														data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
														data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
														data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
														class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;header&amp;gt;Wasserstopp&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;  &lt;br /&gt;
							&amp;lt;div class=&amp;quot;row top-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
										data-icons=&#039;[&amp;quot;fa-close&amp;quot;,&amp;quot;fa-close&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;,&amp;quot;oa-sani_water_tap&amp;quot;]&#039;&lt;br /&gt;
										data-get-on=&#039;[&amp;quot;closed&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;opened&amp;quot;]&#039;&lt;br /&gt;
										data-on-colors=&#039;[&amp;quot;#ad3333&amp;quot;,&amp;quot;#ff6633&amp;quot;,&amp;quot;#3399ff&amp;quot;,&amp;quot;#33ad33&amp;quot;]&#039; class=&amp;quot;big compressed&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
											  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;valve&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-substitution=&#039;[&amp;quot;opened&amp;quot;,&amp;quot;geöffnet&amp;quot;,&amp;quot;opening&amp;quot;,&amp;quot;öffnet gerade&amp;quot;,&amp;quot;closed&amp;quot;,&amp;quot;geschlossen&amp;quot;,&amp;quot;closing&amp;quot;,&amp;quot;schließt gerade&amp;quot;]&#039;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
											&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
									&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell left-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;CloseValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;fa-stop-circle-o&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell right-align top-align right-space&amp;quot;&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;push&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot; data-set-on=&amp;quot;OpenValve 1&amp;quot; data-get-on=&amp;quot;valve&amp;quot; data-background-icon=&amp;quot;mi-play_circle_filled&amp;quot; data-icon=&amp;quot;&amp;quot; class=&amp;quot;small&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;								&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
						&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
						&amp;lt;div class=&amp;quot;sheet&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;	&lt;br /&gt;
								&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 center-align top-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
										  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										  data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
										  data-color=&#039;none&#039;&lt;br /&gt;
										  data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
										  data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
										  data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
										  data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
										  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
												  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
												  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
												  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
												  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
										  &amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-20 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
								&amp;lt;div class=&amp;quot;cell-60 top-align center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
							&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
										data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
										data-min=5&amp;quot;&lt;br /&gt;
										data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
										data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
										data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
										data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
										data-width=&amp;quot;200&amp;quot;&lt;br /&gt;
										data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
										data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
										data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
							&lt;br /&gt;
										class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
										&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
								&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
			&amp;lt;div class=&amp;quot;vbox phone-width&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;header&amp;gt;Wasserverbrauch&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;section&amp;gt; &lt;br /&gt;
							&amp;lt;div id=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-type=&amp;quot;highchart&amp;quot;&lt;br /&gt;
								  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-logdevice=&amp;quot;FileLog_JUDO_ISoft&amp;quot;&lt;br /&gt;
								  data-columnspec=&amp;quot;4:water-current&amp;quot;&lt;br /&gt;
								  data-style=&amp;quot;ftui l0fill&amp;quot;&lt;br /&gt;
								  data-linenames=&amp;quot;Verbrauch&amp;quot;&lt;br /&gt;
								  data-linetypes=&amp;quot;line&amp;quot;&lt;br /&gt;
								  data-yaxis=&amp;quot;0,1&amp;quot;&lt;br /&gt;
								  data-height=&amp;quot;300&amp;quot;&lt;br /&gt;
								  data-xunit=&amp;quot;Uhrzeit&amp;quot;&lt;br /&gt;
								  data-yunit=&amp;quot;l&amp;quot;&lt;br /&gt;
								  data-tooltip=&amp;quot;{series.name} &amp;lt;b&amp;gt;{point.y:,.1f}&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
								  data-daysago=&amp;quot;7&amp;quot;&lt;br /&gt;
								  data-yticks=&amp;quot;auto&amp;quot;&lt;br /&gt;
								  data-legendalign=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/section&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;/div&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26695</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26695"/>
		<updated>2018-05-12T09:50:11Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Darstellung Tablet UI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Darstellung in Tablet UI ==&lt;br /&gt;
Ich nutze Tablet UI für die Visualisierung. &lt;br /&gt;
Zur Darstellung  der Restmengen Salz nutze ich das knob-widget, für das (noch nicht implementierte) Setzen des Härtegrades den spinner.&lt;br /&gt;
[[Datei:Judo isoft plus tabletui.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Salzmengen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;header&amp;gt;Zustand Salz&amp;lt;/header&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;cell center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Restmenge&amp;lt;/div&amp;gt;&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												data-get=&amp;quot;saltQuantityInPercent&amp;quot;&lt;br /&gt;
												data-unit=&amp;quot;%&amp;quot;&lt;br /&gt;
												data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
												data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
												data-max=&amp;quot;100&amp;quot;&lt;br /&gt;
										    	data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
											   data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
												class=&amp;quot;small  readonly&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;cell center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div class=&amp;quot;big&amp;quot;&amp;gt;Reichweite in Wochen&amp;lt;/div&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
									&amp;lt;div data-type=&amp;quot;knob&amp;quot; data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
												data-get=&amp;quot;saltRangeInWeeks&amp;quot;&lt;br /&gt;
												data-unit=&amp;quot;w&amp;quot;&lt;br /&gt;
												data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
												data-min=&amp;quot;0&amp;quot;&lt;br /&gt;
												data-max=&amp;quot;52&amp;quot;&lt;br /&gt;
										    	data-bgcolor=&amp;quot;#FF0000&amp;quot;&lt;br /&gt;
											   data-fgcolor=&amp;quot;#00FF1A&amp;quot;&lt;br /&gt;
												class=&amp;quot;small readonly&amp;quot;&amp;gt;&lt;br /&gt;
									&amp;lt;/div&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Einstellen des Härtegrades&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;card lift&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;header&amp;gt;Wasserhärtegrad&amp;lt;/header&amp;gt;&lt;br /&gt;
					&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;div class=&amp;quot;cell center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div data-type=&amp;quot;symbol&amp;quot;&lt;br /&gt;
								  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								  data-icon=&amp;quot;none&amp;quot;&lt;br /&gt;
								  data-color=&#039;none&#039;&lt;br /&gt;
								  data-height=&amp;quot;100&amp;quot;&lt;br /&gt;
								  data-background-icon=&amp;quot;fa-circle&amp;quot;&lt;br /&gt;
								  data-background-colors=&#039;[&amp;quot;red&amp;quot;,&amp;quot;blue&amp;quot;]&#039;&lt;br /&gt;
								  data-limits=&#039;[&amp;quot;0&amp;quot;,&amp;quot;1&amp;quot;]&#039;&amp;gt;&lt;br /&gt;
								  &amp;lt;div data-type=&amp;quot;label&amp;quot;&lt;br /&gt;
										  data-get=&amp;quot;natural-hardness&amp;quot;&lt;br /&gt;
										  data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
										  class=&amp;quot;valueonly&amp;quot;&lt;br /&gt;
										  data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
										  data-color=&amp;quot;lightgrey&amp;quot;&amp;gt;&lt;br /&gt;
								  &amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
						&lt;br /&gt;
						&amp;lt;div class=&amp;quot;cell center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
								&amp;lt;div data-type=&amp;quot;image&amp;quot;  data-size=&amp;quot;50%&amp;quot; data-url=&amp;quot;images/judo.png&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
									&lt;br /&gt;
						&amp;lt;div class=&amp;quot;cell center-align left-space&amp;quot;&amp;gt;&lt;br /&gt;
					&lt;br /&gt;
							&amp;lt;div data-type=&amp;quot;spinner&amp;quot;&lt;br /&gt;
								data-device=&amp;quot;JUDO_iSoft&amp;quot;&lt;br /&gt;
								data-get=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
								data-set=&amp;quot;residual-hardness&amp;quot;&lt;br /&gt;
								data-min=5&amp;quot;&lt;br /&gt;
								data-max=&amp;quot;12&amp;quot;&lt;br /&gt;
								data-step=&amp;quot;1&amp;quot;&lt;br /&gt;
								data-unit=&amp;quot;&amp;amp;deg;h&amp;quot;&lt;br /&gt;
								data-longdelay=&amp;quot;800&amp;quot;&lt;br /&gt;
								data-width=&amp;quot;300&amp;quot;&lt;br /&gt;
								data-height=&amp;quot;60&amp;quot;&lt;br /&gt;
								data-icon-left-color=&amp;quot;blue&amp;quot;&lt;br /&gt;
								data-icon-right-color=&amp;quot;red&amp;quot;&lt;br /&gt;
					&lt;br /&gt;
								class=&amp;quot;valueonly&amp;quot;&amp;gt;&lt;br /&gt;
								&lt;br /&gt;
							&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
					&amp;lt;/div&amp;gt;&lt;br /&gt;
				&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Judo_isoft_plus_tabletui.png&amp;diff=26694</id>
		<title>Datei:Judo isoft plus tabletui.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Judo_isoft_plus_tabletui.png&amp;diff=26694"/>
		<updated>2018-05-12T09:44:31Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26693</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26693"/>
		<updated>2018-05-12T09:37:58Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Userreadings ergänz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Userreadings&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Um die Originalwerte aus der Anlage benutzerfreundlicher darzzustellen, werden noch Userreadings angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Salzrestdauer soll in Wochen angegeben (Rückgemeldet werden Tage) werden, die verbleibende Salzmenge in Prozent. &lt;br /&gt;
Die Salzemnge wird in Gramm angegeben, 50.000 entsprechen 100%.&lt;br /&gt;
Wichtig: Bei den Userreadings muss darauf geachtet werden, dass diese mit Komma separiert und in einer Zeile geschrieben werden. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft saltRangeInWeeks { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-range&amp;quot;,0)/7))} , saltQuantityInPercent { int( (ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;salt-quantity&amp;quot;,0)/50000)*100)}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* {{Link2Forum|Topic=56455|Message=800960}}&lt;br /&gt;
* [https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/ ursprünglicher Beitrag bzgl. des verwendeten Protokolls]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26676</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26676"/>
		<updated>2018-05-11T16:50:39Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Korrektur der Erzeugung der Readings (Readings mit Leerzeichen können nicht vernünftig weiter verarbeitet werden)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folgt.&lt;br /&gt;
Erklärung zum Ausdruck reading03OExpr: Zunächst werden die Leerzeichen im Rückgabewert ($val) durch &amp;quot;-&amp;quot; ersetzt. Mit dem so veränderten String erzeugen wir ein neues Reading mit dem Wert aus dem Reading data. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr $val =~ s/\s/-/;; $val; readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://forum.fhem.de/index.php/topic,56455.msg800960.html#msg800960] Forumsbeitrag&lt;br /&gt;
[https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/] ursprünglicher Beitrag bzgl. des verwendeten Protokolls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26675</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26675"/>
		<updated>2018-05-11T13:01:03Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: /* Einbindung in FHEM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get15Name Vacation&lt;br /&gt;
attr JUDO_iSoft get15URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=vacation&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get16Name Quantity&lt;br /&gt;
attr JUDO_iSoft get16URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://forum.fhem.de/index.php/topic,56455.msg800960.html#msg800960] Forumsbeitrag&lt;br /&gt;
[https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/] ursprünglicher Beitrag bzgl. des verwendeten Protokolls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26673</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26673"/>
		<updated>2018-05-11T12:52:12Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Weitere get-Befehle ergänz&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get04Name SaltQuantity&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20quantity&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get09Name SoftwareVersion&lt;br /&gt;
attr JUDO_iSoft get09URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=software%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get10Name HardwareVersion&lt;br /&gt;
attr JUDO_iSoft get10URL https://%JUDO_ipaddress%:8124/?group=version&amp;amp;command=hardware%20version&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get11Name InstallationDate&lt;br /&gt;
attr JUDO_iSoft get11URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=init%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get12Name ServiceDate&lt;br /&gt;
attr JUDO_iSoft get12URL https://%JUDO_ipaddress%:8124/?group=contract&amp;amp;command=service%20date&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get13Name WaterTotal&lt;br /&gt;
attr JUDO_iSoft get13URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20total&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
attr JUDO_iSoft get14Name WaterAverage&lt;br /&gt;
attr JUDO_iSoft get14URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20average&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://forum.fhem.de/index.php/topic,56455.msg800960.html#msg800960] Forumsbeitrag&lt;br /&gt;
[https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/] ursprünglicher Beitrag bzgl. des verwendeten Protokolls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26672</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26672"/>
		<updated>2018-05-11T12:40:21Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Bild ersetzt, Links ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, und damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get04Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[https://forum.fhem.de/index.php/topic,56455.msg800960.html#msg800960] Forumsbeitrag&lt;br /&gt;
[https://blog.muwave.de/2017/06/monitoring-and-controlling-a-judo-i-soft-plus-water-softening-device-via-lan/] ursprünglicher Beitrag bzgl. des verwendeten Protokolls&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26670</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26670"/>
		<updated>2018-05-11T12:37:14Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Bild ersetzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=judo-soft-plus.jpg|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, und damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get04Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[https://forum.fhem.de/index.php/topic,56455.msg800960.html#msg800960]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:Judo-soft-plus.jpg&amp;diff=26668</id>
		<title>Datei:Judo-soft-plus.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:Judo-soft-plus.jpg&amp;diff=26668"/>
		<updated>2018-05-11T12:35:31Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26661</id>
		<title>JUDO iSoft Plus</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=JUDO_iSoft_Plus&amp;diff=26661"/>
		<updated>2018-05-11T09:11:56Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Initiale Erstellung der Integration einer JUDO iSoft Plus auf Basis HTTPMOD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Hardware&lt;br /&gt;
|Bild=Judo-soft-plus.png|200px&lt;br /&gt;
|Bildbeschreibung=JUDO iSoft Plus Wasserenthärtungsanlage&lt;br /&gt;
|HWProtocol=IP&lt;br /&gt;
|HWType=[[Wasserenthärter|Wasserenthärter]]&lt;br /&gt;
|HWCategory=IP&lt;br /&gt;
|HWVoltage=230&amp;amp;nbsp;V&lt;br /&gt;
|HWPowerConsumption=180&amp;amp;nbsp;mA&lt;br /&gt;
|HWPoweredBy=AC&lt;br /&gt;
|HWSize=39x67x45 cm (BxHxT)&lt;br /&gt;
|HWComm=n/a&lt;br /&gt;
|HWChannels=n/a&lt;br /&gt;
|HWPowerConsumption=?&lt;br /&gt;
&lt;br /&gt;
|HWDeviceFHEM=[[HTTPMOD]]&lt;br /&gt;
&amp;lt;!-- |ModOwner=  --&amp;gt;&lt;br /&gt;
|HWManufacturer=Judo GmbH&lt;br /&gt;
}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Die JUDO i-soft plus Enthärtungsanlage [https://judo.eu/produkt/judo-i-soft-plus-vollautomatische-enthaertungsanlage/] ist eine Wasserenthärtungsanlage mit IP-Konnektivität. &lt;br /&gt;
Sie verfügt über LAN und WLAN-Anschluss und ist auf die Steuerung via App des Herstellers ausgelegt.&lt;br /&gt;
&lt;br /&gt;
Für eine erfolgreiche Integration in FHEM muss die Anlage über das Menü beim Hersteller registriert werden.&lt;br /&gt;
Die folgenden Informationen sind erforderlich:&lt;br /&gt;
&lt;br /&gt;
* Benutzername: Selbst gewählter Login-Name auf der iSoft plus (vgl. Gerätehandbuch)&lt;br /&gt;
* Kennwort:     Selbst gewähltes Kennwort&lt;br /&gt;
* Seriennummer: Seriennummer des Geräts. Diese ist entweder über das Menü auslesbar oder alternativ auch über die APP des Herstellers.&lt;br /&gt;
* IP-Adresse:   Die IP-Adresse des Geräts im Heimnetz. &lt;br /&gt;
&lt;br /&gt;
== Einbindung in FHEM ==&lt;br /&gt;
&lt;br /&gt;
Das Gerät wird mittels des Moduls HTTPMOD eingebunden. Dazu gilt zunächst die folgende Konfiguration als Basis.&lt;br /&gt;
Zunächst legen wir die Standardanfrage an das Modul fest. Die Portnummer 8124 ist vom Hersteller vorgegeben. Wir vergeben gleich ein paar Platzhalter, die später in den Aufrufen und den Antworten ersetzt werden, und damit wir die Werte nur an einer zentralen Stelle konfigurieren müssen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define JUDO_iSoft HTTPMOD https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgreicher Authentifizierung wird von der iSoft ein Token generiert und muss bei jedem Aufruf übergeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement01Mode reading&lt;br /&gt;
attr JUDO_iSoft replacement01Regex %token%&lt;br /&gt;
attr JUDO_iSoft replacement01Value token&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend legen wir die Ersetzungen für die anderen Platzhalter fest: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement02Mode text&lt;br /&gt;
attr JUDO_iSoft replacement02Regex %JUDO_ipaddress%&lt;br /&gt;
attr JUDO_iSoft replacement02Value &amp;lt;hier eigene IP Adresse im lokalen Netz eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement03Mode text&lt;br /&gt;
attr JUDO_iSoft replacement03Regex %JUDO_password%&lt;br /&gt;
attr JUDO_iSoft replacement03Value &amp;lt;hier Kennwort eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement04Mode text&lt;br /&gt;
attr JUDO_iSoft replacement04Regex %JUDO_username%&lt;br /&gt;
attr JUDO_iSoft replacement04Value &amp;lt;hier Benutzername eintragen&amp;gt;&lt;br /&gt;
attr JUDO_iSoft replacement05Mode text&lt;br /&gt;
attr JUDO_iSoft replacement05Regex %JUDO_serial%&lt;br /&gt;
attr JUDO_iSoft replacement05Value &amp;lt;hier Seriennummer eintragen&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Authentifizierung der Anlage erfolgt zwei-stufig. Zunächst muss ein Aufruf mit Benutzername und Kennwort erfolgen. Als Antwort erhält man einen JSON-String, der das Token beinhaltet. Mit diesem Token wird anschließend die Funktion connect aufgerufen und die Seriennummer des Geräts mit übergeben. &lt;br /&gt;
HTTPMOD erkennt, wenn ein neues Login erforderlich ist, wenn die Judo die Rückmeldung &amp;quot;no token&amp;quot; oder &amp;quot;not logged in&amp;quot; liefert.&lt;br /&gt;
&lt;br /&gt;
Achtung: Als Parameter muss ebenfalls der Typ &amp;quot;i-soft plus&amp;quot; übergeben werden. Vermutlich ist dieser bei anderen Geräten des Herstellers anders. Ich habe ihn hier fix eingetragen, da ich keine Möglichkeit zum Testen anderer Geräte habe. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft showError 1&lt;br /&gt;
attr JUDO_iSoft authRetries 2&lt;br /&gt;
attr JUDO_iSoft reAuthRegex (no token)|(not logged in)&lt;br /&gt;
attr JUDO_iSoft sid01ParseResponse 1&lt;br /&gt;
attr JUDO_iSoft sid01URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=login&amp;amp;msgnumber=1&amp;amp;name=login&amp;amp;user=%JUDO_username%&amp;amp;password=%JUDO_password%&amp;amp;role=customer&lt;br /&gt;
attr JUDO_iSoft sid02URL https://%JUDO_ipaddress%:8124/?group=register&amp;amp;command=connect&amp;amp;msgnumber=6&amp;amp;token=%token%&amp;amp;parameter=i-soft%20plus&amp;amp;serial%20number=%JUDO_serial%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit ist die Grundkonfiguration hergestellt und die Anlage kann sich connecten. &lt;br /&gt;
In den einzelnen JSON-Rückantworten der Anlage werden die Werte zur jeweilige Anfrage immer als &amp;quot;data&amp;quot; zurück geliefert. Mit der Standard-Konfiguration&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft extractAllJSON 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden daraus automatisch entsprechernde Readings angelegt. Da wir aber dann immer das Reading &amp;quot;data&amp;quot; überschreiben würde, kommt eine weitere Ersetzung zum Einsatz. In der Antwort steht neben einer Kaskadierung (group) auch der zugehörige Befehl (command). Ich habe mich dafür entschieden, ein neues Reading mit dem jeweiligen Command-Namen anzulegen. Die zugehörigen Ersetzungen sind wie folg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft reading01JSON data&lt;br /&gt;
attr JUDO_iSoft reading01Name token&lt;br /&gt;
attr JUDO_iSoft reading01Regex &amp;quot;token&amp;quot;:&amp;quot;([^&amp;quot;]+)&amp;quot;&lt;br /&gt;
attr JUDO_iSoft reading02JSON group&lt;br /&gt;
attr JUDO_iSoft reading03JSON command&lt;br /&gt;
attr JUDO_iSoft reading03OExpr readingsBulkUpdate($hash,$val,ReadingsVal(&amp;quot;JUDO_iSoft&amp;quot;,&amp;quot;data&amp;quot;,&amp;quot;&amp;quot;))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Noch ein paar ergänzende Attribute gesetzt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft enableControlSet 1&lt;br /&gt;
attr JUDO_iSoft getHeader1 Content-Type: application/json&lt;br /&gt;
attr JUDO_iSoft getHeader2 Accept: */*&lt;br /&gt;
attr JUDO_iSoft room 10_Räume-&amp;gt;UG-&amp;gt;Keller,&lt;br /&gt;
attr JUDO_iSoft showError &lt;br /&gt;
attr JUDO_iSoft timeout 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit sind alle Voraussetzungen erledigt. Ab jetzt können wir die einzelnen Get-Befehle implementieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr JUDO_iSoft get01Name SerialNumber&lt;br /&gt;
attr JUDO_iSoft get01URL https://%JUDO_ipaddress%:8124/?group=spare%20part&amp;amp;command=serial%20number&amp;amp;msgnumber=5&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get02Name WaterCurrent&lt;br /&gt;
attr JUDO_iSoft get02URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=water%20current&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get03Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get03URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get04Name SaltRange&lt;br /&gt;
attr JUDO_iSoft get04URL https://%JUDO_ipaddress%:8124/?group=consumption&amp;amp;command=salt%20range&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get05Name ResidualHardness&lt;br /&gt;
attr JUDO_iSoft get05URL https://%JUDO_ipaddress%:8124/?group=settings&amp;amp;command=residual%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get06Name NaturalHardness&lt;br /&gt;
attr JUDO_iSoft get06URL https://%JUDO_ipaddress%:8124/?group=info&amp;amp;command=natural%20hardness&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get07Name WaterStop&lt;br /&gt;
attr JUDO_iSoft get07URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=valve&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
attr JUDO_iSoft get08Name FlowRate&lt;br /&gt;
attr JUDO_iSoft get08URL https://%JUDO_ipaddress%:8124/?group=waterstop&amp;amp;command=flow%20rate&amp;amp;msgnumber=1&amp;amp;token=%token%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Weitere Befehle insbesondere zum Setzen und die Auswertung der Verbrauchswerte folgen.&lt;br /&gt;
&lt;br /&gt;
== Ähnliche Systeme ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projekte der FHEM-Community ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
[[https://forum.fhem.de/index.php/topic,56455.msg800960.html#msg800960]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:IP Components]]&lt;br /&gt;
[[Kategorie:Other Components]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=IPCAM&amp;diff=25682</id>
		<title>IPCAM</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=IPCAM&amp;diff=25682"/>
		<updated>2018-03-04T11:36:50Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Xiaomi Dafang ergänzt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Einbindung von Netzwerkkameras&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Sonstiges&lt;br /&gt;
|ModTechName=49_IPCAM.pm&lt;br /&gt;
|ModOwner=mfr69bs ({{Link2FU|6|Martin Fischer}})}}&lt;br /&gt;
&lt;br /&gt;
[[IPCAM]] ermöglicht die ereignis- oder zeitgesteuerte Erzeugung von Mitschnitten bei Netzwerkkameras. Außerdem ist es möglich, die Kamera im PTZ-Modus oder über eigene Befehle zu steuern.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Die Kamera(bilder) müssen über eine URL erreichbar sein.&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
Das IPCAM Objekt wird angelegt mit&lt;br /&gt;
:&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;define &amp;lt;name&amp;gt; IPCAM &amp;lt;ip[:port]&amp;gt; &amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich zum obigen Define muss zwingend noch das &#039;&#039;path&#039;&#039; Attribut gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
Die wichtigsten Attribute von &#039;&#039;IPCAM&#039;&#039; werden im Folgenden aufgeführt, die komplette Liste findet sich in der {{Link2CmdRef|Anker=IPCAMattr}}.&lt;br /&gt;
&lt;br /&gt;
=== Authentifizierung ===&lt;br /&gt;
;basicauth&lt;br /&gt;
:Hinterlegung von Benutzernamen und Passwort &lt;br /&gt;
&lt;br /&gt;
=== Eigene Befehle ===&lt;br /&gt;
;cmd01, cmd02, ... cmd15&lt;br /&gt;
:Festlegung von Befehlen, die nicht zu den vordefinierten gehören, z.B. &amp;lt;code&amp;gt;attr ipcam cmd01 led_mode=0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vordefinierte Befehle ===&lt;br /&gt;
;cmdPanLeft, cmdPanRight, cmdTiltUp, cmdTiltDown, cmdStep &lt;br /&gt;
:Diesen Befehlen können die Kameraspezifischen Werte zugeordnet werden, z.B. &amp;lt;code&amp;gt;attr ipcam cmdTiltUp command=0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfade ===&lt;br /&gt;
;path&lt;br /&gt;
:...&lt;br /&gt;
&lt;br /&gt;
== Unterstützte Netzwerkkameras ==&lt;br /&gt;
{{Randnotiz|RNText=Die Aufzählungen der unterstützten und der problematischen Netzwerkkameras sollten ergänzt werden, sobald neue Erkenntnisse vorliegen; beide Listen sind nicht vollständig.}}&lt;br /&gt;
Bei den folgenden Netzwerkkameras ist gesichert, dass sie durch das &#039;&#039;IPCAM&#039;&#039; Modul unterstützt sind:&lt;br /&gt;
* {{Link2Forum|Topic=33347|Message=257115|LinkText=Foscam 9805W}}&lt;br /&gt;
* Foscam FI9831P&lt;br /&gt;
* {{Link2Forum|Topic=13826|LinkText=Instar 2905}}&lt;br /&gt;
* {{Link2Forum|Topic=36201|LinkText=IN-6001HD}}&lt;br /&gt;
* {{Link2Forum|Topic=11664|LinkText=Instar 6011, 6012, 2905}}&lt;br /&gt;
* {{Link2Forum|Topic=58676|LinkText=Instar IN-5905HD, IN-5907HD, IN-6014HD, IN-6012HD-PoE}}&lt;br /&gt;
* {{Link2Forum|Topic=15217|LinkText=WansView (Modell nicht näher spezifiziert)}}&lt;br /&gt;
* {{Link2Forum|Topic=11664|Message=158052|LinkText=Wansview 620, 625, 6012}}&lt;br /&gt;
* Axis 205&lt;br /&gt;
* D-Link DCS-933&lt;br /&gt;
*  Xiaomi Dafang (nur mit alternativer Firmware)&lt;br /&gt;
&lt;br /&gt;
Nicht gesichert, ob die Kamera unterstützt wird bzw. ob alle Funktionen nutzbar sind:&lt;br /&gt;
* {{Link2Forum|Topic=33347|LinkText=Foscam FI9831W}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für Axis 205 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
attr Cam1 path /jpg/image.jpg&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für D-Link DCS-933 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;attr Cam1 path image.jpg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parameter für Hikvision DS-2CD2032-I ===&lt;br /&gt;
Mit folgenden Parameter wurde (lt. diesem {{Link2Forum|Topic=39932|Message=322269|LinkText=Forenbeitrag}}) die Hikvision DS-2CD2032-I erfolgreich betrieben:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define Cam1 IPCAM 192.168.xxx.xxx&lt;br /&gt;
attr Cam1 basicauth &amp;lt;username&amp;gt;:&amp;lt;passwort&amp;gt;&lt;br /&gt;
attr Cam1 delay 0&lt;br /&gt;
attr Cam1 group Kamera&lt;br /&gt;
attr Cam1 icon it_camera&lt;br /&gt;
attr Cam1 path Streaming/channels/1/picture?snapShotImageType=JPEG&lt;br /&gt;
attr Cam1 snapshots 1&lt;br /&gt;
attr Cam1 storage /opt/fhem/www/snapshots/cam1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pfad-Parameter für Foscam FI9831P ===&lt;br /&gt;
Die Version ist ohne basicauth und hat Nutzer und Passwort direkt in der URL. Kann natürlich geändert werden.&lt;br /&gt;
Sämtliche Befehle für die Foscam HD Kameras findet man [https://www.manualslib.com/manual/728928/Foscam-Ip-Camera.html hier]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define IPKamera IPCAM &amp;lt;ip&amp;gt;:&amp;lt;port&amp;gt;&lt;br /&gt;
attr IPKamera cmd01 cmd=ptzStopRun&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdPanLeft cmd=ptzMoveLeft&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdPanRight cmd=ptzMoveRight&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdPos01 cmd=ptzGotoPresetPoint&amp;amp;name=&amp;lt;Nameposition&amp;gt;&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdTiltDown cmd=ptzMoveDown&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera cmdTiltUp cmd=ptzMoveUp&amp;amp;usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera path cgi-bin/CGIProxy.fcgi?usr=xxx&amp;amp;pwd=xxx&amp;amp;cmd=snapPicture2&lt;br /&gt;
attr IPKamera pathCmd cgi-bin/CGIProxy.fcgi&lt;br /&gt;
attr IPKamera pathPanTilt cgi-bin/CGIProxy.fcgi?usr=xxx&amp;amp;pwd=xxx&lt;br /&gt;
attr IPKamera storage ./www/images/webcam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Einstellungen für Foscam C2 und Foscam R2 ===&lt;br /&gt;
Eine ausführliche Beschreibung zur Benutzung der IP Kameras Foscam C2 und Foscam R2 findet sich in {{Link2Forum|Topic=84677|LinkText=diesem Forenthread}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parameter für Xiaomi Dafang ===&lt;br /&gt;
Diese Parameter gelten bei installierter alternativer Firmware von [https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks hier]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attributes:&lt;br /&gt;
attr IPKamera  cmdPanLeft cmd=motor_left&lt;br /&gt;
attr IPKamera  cmdPanRight cmd=motor_right&lt;br /&gt;
attr IPKamera  cmdTiltDown cmd=motor_down&lt;br /&gt;
attr IPKamera  cmdTiltUp  cmd=motor_up&lt;br /&gt;
attr IPKamera  delay      10&lt;br /&gt;
attr IPKamera  event-on-update-reading snapshots&lt;br /&gt;
attr IPKamera  icon       it_camera&lt;br /&gt;
attr IPKamera  path       cgi-bin/currentpic.cgi&lt;br /&gt;
attr IPKamera  pathPanTilt cgi-bin/action.cgi?&lt;br /&gt;
attr IPKamera  snapshots  5&lt;br /&gt;
attr IPKamera  storage    /opt/fhem/www/ipcamera/dafang_1/shot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nicht unterstützte Netzwerkkameras ==&lt;br /&gt;
{{Randnotiz|RNTyp=y|RNText=Die hier aufgeführten Netzwerkkameras sind definitiv nicht unterstützt oder es gibt gravierende, hier beschriebene Einschränkungen.}}&lt;br /&gt;
;TRENDnet TV-IP320PI &lt;br /&gt;
:Aufruf der Funktion &amp;lt;code&amp;gt;get &#039;&#039;myCam&#039;&#039; image&amp;lt;/code&amp;gt; führt zur Fehlermeldung &#039;&#039;...invalid Format&#039;&#039;; auf Kamerabild oder Stream kann jedoch über die URL camHostnameOrIP/Streaming/channels/1/Picture (Bild) bzw. camHostnameOrIP/Streaming/channels/1/httpPreview (Stream) zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
== Generierte Ereignisse ==&lt;br /&gt;
Das Modul &#039;&#039;IPCAM&#039;&#039; generiert die Ereignisse &lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;last: &amp;lt;name_of_device&amp;gt;_snapshot.&amp;lt;image_extension&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;snapshots: &amp;lt;total_number_of_taken_snapshots_at_end&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
Derzeit (08/2015) ist das Logging aus dem Modul zumindest lückenhaft und verbesserungsfähig. So sollten z.B. einige weitere Meldungen zur Fehlereingrenzung bei der Einrichtung eines IPCAM Objekts eingefügt werden:&lt;br /&gt;
* Ausgabe des kompletten Pfads / der URL, die bei der Erzeugung eines Snapshots aus einzelnen Bestandteilen zusammengesetzt wird&lt;br /&gt;
* Die Zuordnung von Meldungen zu &#039;&#039;verbose&#039;&#039;-Leveln sollte kontrolliert und ggf. umgestellt werden&lt;br /&gt;
* siehe auch diesen {{Link2Forum|Topic=39932|LinkText=Forenthread}}, der Beschreibung von Problemen, eine Hikvision IPCam in Betrieb zu nehmen&lt;br /&gt;
&lt;br /&gt;
Außerdem müsste das Modul dringend auf die aktuelle Form des Logging, [[verbose|verbose/Log3]], umgestellt werden.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Lösung für das Problem &amp;quot;Wrong or not supported image format: unknown&amp;quot; habe ich hier beschrieben: {{Link2Forum|Topic=10772|Message=425265|LinkText=Forenbeitrag}}&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* Forenthread zur {{Link2Forum|Topic=10772|LinkText=Erweiterung des IPCAM Moduls}}&lt;br /&gt;
* Forenthread zum Thema {{Link2Forum|Topic=21005|LinkText=Bewegungserkennung}}&lt;br /&gt;
* Forenthread zum Thema {{Link2Forum|Topic=30723|LinkText=Bewegungsmelder der Kamera &amp;quot;anzapfen&amp;quot;}}&lt;br /&gt;
* Webseite des Modulautors zum Thema [http://www.fischer-net.de/hausautomation/videoueberwachung.html Videoüberwachung]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Intertechno_Code_Berechnung&amp;diff=16598</id>
		<title>Intertechno Code Berechnung</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Intertechno_Code_Berechnung&amp;diff=16598"/>
		<updated>2016-10-11T19:32:27Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Neue Passage für OBI-Zwischenstecker eingeführt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Intertechno&#039;&#039;&#039; Systemkomponenten sind kostengünstige und weit verbreitete Funkschalter/-dimmer im 433 MHz Bereich, die man in fast jedem Baumarkt unter den Markennamen Intertechno, düwi, KlikAanKlikUit usw. erhalten kann. &lt;br /&gt;
&lt;br /&gt;
Es gibt eine Anzahl weiterer Hersteller/Handelsmarken mit ähnlicher Kodierung oder Einstellmöglichkeiten mit DIP Schaltern, die ebenfalls mit dem Intertechno Code geschaltet werden können. Dazu zählen von Usern bereits erfolgreich getestete Geräte von Elro AB440, FLS-100/m-e, Wetekom/Westfalia und weitere, theoretisch mögliche aber ungetestete Systeme wie Unitec oder Arctech Steckdosen (siehe [http://avr.börke.de/E-Funk.htm Börkes-HP])&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen in Fhem ==&lt;br /&gt;
Schalten kann man die Intertechno Funkkomponenten in Fhem über verschiedene Wege. So z.B. über CUL/CUNO, Tellstick, [[AVR-NET-IO]].&lt;br /&gt;
&lt;br /&gt;
Hier beschrieben ist die Ansteuerung über CUL/CUNO, dessen Firmware für Intertechno erweitert wurde (Danke an Olaf Droegehorn). Momentan ist in CUL/CUNO das SENDEN von Intertechno Funk implementiert. Die Firmware muss mindestens den Stand 1.44 haben (Kontrolle der Version in den Fhem Detaildaten zum [[CUL]]/[[CUNO]]). Die CUL433/CUNO433 haben dabei volle Reichweite, die Versionen CUL868/CUNO868 funktionieren ebenfalls, haben aufgrund der nicht optimalen Antennenlänge und falschen Abstimmung für den Frequenzbereich aber nur eine eingeschränke Reichweite.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
Die Definition des IT Gerätes in FHEM sieht für &#039;&#039;&#039;alte Geräte&#039;&#039;&#039; so aus:&lt;br /&gt;
&amp;lt;source lang=text&amp;gt;&lt;br /&gt;
define myITSwitch IT &amp;lt;housecode&amp;gt;&amp;lt;group_switch&amp;gt; &amp;lt;on-code&amp;gt; &amp;lt;off-code&amp;gt; [&amp;lt;dimup-code&amp;gt; &amp;lt;dimdown-code&amp;gt;]&lt;br /&gt;
attr myITSwitch IODev CUL_x (CUNO_x)&lt;br /&gt;
attr myITSwitch model itswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die weitere Anleitung soll die Bildung der Bitfolge für die Zusammensetzung des Schaltcodes erklären. &lt;br /&gt;
Wichtig zu wissen ist auch, dass es sich um einen 3state code handelt, d.h. jedes Bit kann &#039;&#039;&#039;0,1 oder F&#039;&#039;&#039; sein!&lt;br /&gt;
&lt;br /&gt;
Die selbst &#039;&#039;&#039;lernenden&#039;&#039;&#039; neue &#039;&#039;&#039;Geräte&#039;&#039;&#039; definiert man in FHEM so:&lt;br /&gt;
&amp;lt;source lang=text&amp;gt;&lt;br /&gt;
define &amp;lt;name&amp;gt; IT &amp;lt;26-Bit Adresse&amp;gt; &amp;lt;1-Bit Gruppen Bit&amp;gt; &amp;lt;4-Bit Gerät&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dabei kann man die 26-Bit Adresse frei wählen, so dass Kollisionen mit Nachbarn sehr unwahrscheinlich werden.&lt;br /&gt;
Einen GRR-3500 der über einen CUL gesteuert werden soll definiert man z.B. so&lt;br /&gt;
&amp;lt;source lang=text&amp;gt;&lt;br /&gt;
define sw_it_outdoor IT 01010101010101010101010101 0 0000&lt;br /&gt;
attr myITSwitch IODev CUL_0&lt;br /&gt;
attr myITSwitch model itswitch&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Danach die {{Taste|CODE}}-Taste am Funkschalter betätigen (die LED blinkt) und über FHEM den Einschaltcode senden.&lt;br /&gt;
&lt;br /&gt;
== Original Intertechno System ==&lt;br /&gt;
&lt;br /&gt;
Durch Kombination von Hauscode und Geräetecode können maximal 256 Geräte verwendet werden. Dannn würde allerdings alle Hauscodes belegt, was eventuell zu Störungen mit Nachbarinstallationen führen könnte.&lt;br /&gt;
&lt;br /&gt;
=== Hauscode (die ersten vier Stellen (0-3) ===&lt;br /&gt;
Der Hauscode wird auf dem Drehschalter auf der Rückseite eingestellt und hat die Bezeichnung &#039;&#039;&#039;A-P&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Img_3324_small.png|thumb|Intertechno Schalter]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 0-3&lt;br /&gt;
|-&lt;br /&gt;
| A || 0000&lt;br /&gt;
|-&lt;br /&gt;
| B || F000&lt;br /&gt;
|-&lt;br /&gt;
| C || 0F00&lt;br /&gt;
|-&lt;br /&gt;
| D || FF00&lt;br /&gt;
|-&lt;br /&gt;
| E || 00F0&lt;br /&gt;
|-&lt;br /&gt;
| F || F0F0&lt;br /&gt;
|-&lt;br /&gt;
| G || 0FF0&lt;br /&gt;
|-&lt;br /&gt;
| H || FFF0&lt;br /&gt;
|-&lt;br /&gt;
| I || 000F&lt;br /&gt;
|-&lt;br /&gt;
| J || F00F&lt;br /&gt;
|-&lt;br /&gt;
| K || 0F0F&lt;br /&gt;
|-&lt;br /&gt;
| L || FF0F&lt;br /&gt;
|-&lt;br /&gt;
| M || 00FF&lt;br /&gt;
|-&lt;br /&gt;
| N || F0FF&lt;br /&gt;
|-&lt;br /&gt;
| O || 0FFF&lt;br /&gt;
|-&lt;br /&gt;
| P || FFFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gruppen-/Gerätecode (Stelle 4-7) ===&lt;br /&gt;
Der zweite Drehschalter ist mit den Zahlen von 1-16 beschriftet. Das ist eine Zusammensetzung von Gruppe und Gerätecode und ergibt die nächsten 4 Stellen. Die dritte Spalte in der Tabelle zeigt die Zuordnung einer Intertechno YCT-100 / ITS-150 Fernbedienung. Diese ist mit Drehschalter auf der Rückseite (A-P), einem Gruppenschalter (1-4) , und je vier  ein-/aus-Tasten belegt.&lt;br /&gt;
&lt;br /&gt;
[[File:Img_3325_small.png|right|thumb|Intertechno Fernbedienung]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 4-7 !! Fernbedienung Gruppe/Taste&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0000 || 1 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 02 || F000 || 1 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0F00 || 1 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 04 || FF00 || 1 - 4&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 00F0 || 2 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 06 || F0F0 || 2 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0FF0 || 2 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 08 || FFF0 || 2 - 4&lt;br /&gt;
|-&lt;br /&gt;
| 09 || 000F || 3 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 10 || F00F || 3 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0F0F || 3 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || FF0F || 3 - 4&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 00FF || 4 - 1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || F0FF || 4 - 2&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0FFF || 4 - 3&lt;br /&gt;
|-&lt;br /&gt;
| 16 || FFFF || 4 - 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Stellen 8-9 (Festwert 0F) ===&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;Die Positionen 8-9 sind immer fest auf &#039;&#039;&#039;0F&#039;&#039;&#039;zu stellen&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stellen 10-11 (Ein/Aus) ===&lt;br /&gt;
Bei den beiden letzten Stellen steht als Codierung für ON = FF und OFF = F0.&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
Drehschalter/Hauscode auf &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; Schalter 1 -&amp;amp;gt; 000000000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 1)&lt;br /&gt;
 Schalter 2 -&amp;amp;gt; 0000F0000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 2)&lt;br /&gt;
 Schalter 3 -&amp;amp;gt; 00000F000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 3)&lt;br /&gt;
 Schalter 4 -&amp;amp;gt; 0000FF000F FF F0 (entspricht Fernbedienung Gruppe I und Schalter 4)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drehschalter/Hauscode auf &#039;&#039;&#039;L&#039;&#039;&#039;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; Schalter 11 -&amp;amp;gt; FF0F0F0F0F FF F0 (entspricht Fernbedienung Gruppe III und Schalter 3)&lt;br /&gt;
 Schalter 16 -&amp;amp;gt; FF0FFFFF0F FF F0 (entspricht Fernbedienung Gruppe IV und Schalter 4)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
komplett für die fhem cfg also z.B. Hauscode A und Gruppe 1 Gerät/Schalter 1 und CUL Bezeichnung CUL1:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; define schalter1 IT 000000000F FF F0&lt;br /&gt;
 attr schalter1 IODev CUL1&lt;br /&gt;
 attr schalter1 model itswitch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Selbstlernende Intertechno Funksteckdosen (z.B. ITR-1500) ===&lt;br /&gt;
Die selbst lernenden Intertechno Funksteckdosen haben ein neues erweitertes Protokoll bei dem ein 32-Bit Wort gesendet wird. Sie sind aber weiterhin kompatibel zum bisherigen 12-Bit Protokoll. In der culfw wird das alte Protokoll mit &amp;quot;Intertechno V1&amp;quot; und das neue mit &amp;quot;Intertechno V3&amp;quot; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
==== Mit altem Protokoll anlernen ====&lt;br /&gt;
{{Randnotiz|RNTyp=Fehl|RNText=Schon aus Gründen der Störsicherheit ist davon abzuraten bei neuen selbst lernenden Intertechno Geräten den alten 12-Bit Code zu verwenden. Dieser wird nur unterstützt um rückwärts kompatibel zu sein.}}&lt;br /&gt;
Zum Anlernen der selbst lernenden Funksteckdosen muss ein gültiger(!) ON-Befehl in den ersten fünf Sekunden nach dem Einstecken der Funksteckdose in eine normalen Steckdose gesendet werden. Die Funksteckdosen haben drei Speicherplätze, so dass man beispielsweise ein ITR-1500 Set zuerst mit der Fernbedienung anlernen und anschließend eigene Codes von Fhem senden lassen kann. Damit man einen gültigen Code sendet, sucht man sich einfach eine beliebige Kombination aus der obigen Tabelle aus (z.B. C-1, C-2 und C-3) und ergänzt entsprechend um die immer identischen Stellen 8 und 9 (0F) und den ON- und OFF-Code (FF/F0).&lt;br /&gt;
Das Senden der Codes von Fhem erfolgt am einfachsten, indem man sich die Steckdosen vorher in der Konfiguration so anlegt, wie man sie haben möchte und anschließend über die Weboberfläche den ON-Befehl gibt.&lt;br /&gt;
&lt;br /&gt;
Mitunter funktioniert das reine Senden des ON Befehls aber nicht, da einige dieser Steckdosen einen längeren ON Befehl benötigen und die Sendedauer bei Fhem/CUL/CUNO nicht beeinflusst werden kann. In diesem Fall nimmt man eine YCT-100 oder ITS-150 Fernbedienung, an der die gewünschte Adresse eingestellt werden kann. Zum Anlernen drückt man nun etwas länger auf den passenden Einschaltknopf, danach kann die Dose von Fhem normal geschaltet werden.&lt;br /&gt;
&lt;br /&gt;
==== Angelernten Code löschen ====&lt;br /&gt;
Hier gibt es zwei Möglichkeiten.&lt;br /&gt;
# Man sendet wie beim Anlernen innerhalb der ersten 5 Sekunden einen OFF-Befehl. Die Funksteckdosen quittiert diesen mit zweimaligem einschalten. Anschließend reagiert sie auf diesen Code nicht mehr.&lt;br /&gt;
# Manche neueren Intertechno Geräte (z.B. GRR-3500) haben eine {{Taste|CODE}}-Taste. Durch kurzes drücken wird die Funksteckdose für 5 Sekunden in den Betrieb zum Anlernen gesetzt. Hält man diese Taste bis die LED hektisch blinkt, lässt sie dann los und drückt sie noch einmal kurz, so wird der gesammte Speicher für angelernte Codes gelöscht. Die Funksteckdose quittiert das wie üblich durch zweimaliges Einschalten.&lt;br /&gt;
&lt;br /&gt;
==== Mit neuem Protokoll anlernen ====&lt;br /&gt;
Die neuen Funksteckdosen können laut Werbung &#039;&#039;&amp;quot;67 Millionen verschiedene Codes&amp;quot;&#039;&#039;, das sind 26-Bits (2^26 = 67108864). Da hat die Werbung tatsächlich mal untertrieben. Tatsächlich arbeitet das neue Protokoll mit einem 32-Bit Wort. Jede neue Fernbedienung (z.B. ITT-1500) bekommt ab Werk einen fest einprogrammierten (und hoffentlich weltweit eindeutigen) ID-Code aus 26 Bits. Daran hängt sie ein 2-Bit Kommando und eine 4-Bit Geräte bzw. Tastenpaar Nummer:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-style:solid; border-width:4px&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| 26-Bit ID des steuernden Geräts (Fernbedienung)&lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| 2-Bit Kommando &lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| 4-Bit Kanal-ID (Tastenpaar)&lt;br /&gt;
 |-&lt;br /&gt;
|}&lt;br /&gt;
Das 2-Bit Kommando ist ein ON oder OFF Befehl an ein einzelnes Gerät oder eine Gruppe.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! Befehl !! Bedeutung&lt;br /&gt;
 |-&lt;br /&gt;
 | 0 0 || Ein Gerät einschalten&lt;br /&gt;
 |-&lt;br /&gt;
 | 0 1 || Ein Gerät ausschalten&lt;br /&gt;
 |-&lt;br /&gt;
 | 1 0 || Alle Geräte (dieser Gruppe) einschalten&lt;br /&gt;
 |-&lt;br /&gt;
 | 1 1 || Alle Geräte (dieser Gruppe) ausschalten&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
Die ITT-1500 hat zwar eine {{Taste|ALL OFF}}-Taste aber keine {{Taste|ALL ON}}.&lt;br /&gt;
Ob das Einschalten als Gruppe generell unterstützt wird ist nicht bekannt.&lt;br /&gt;
Einen gültiger Einschaltbefehl kann man am [[CUL]] z.B. mit diesem Kommando senden:&lt;br /&gt;
&amp;lt;source lang=text&amp;gt;&lt;br /&gt;
is01010010101011101000000110010011&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Gegensatz zum alten Protokoll (Intertechno V1) wird das Binärwort hier nicht mit 0 und &#039;&#039;&#039;F&#039;&#039;&#039; sondern 0 und &#039;&#039;&#039;1&#039;&#039;&#039; gesendet.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border-style:solid; border-width:4px&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| &#039;&#039;&#039;is&#039;&#039;&#039; &#039;&#039;(Sende Intertechno Kommando)&#039;&#039;&lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| &#039;&#039;&#039;01010010101011101000000110&#039;&#039;&#039; &#039;&#039;(Gerätecode Fernbedienung)&#039;&#039;&lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| &#039;&#039;&#039;01&#039;&#039;&#039; &#039;&#039;(Kommando ON)&#039;&#039;&lt;br /&gt;
 |style=&amp;quot;border-style:solid; border-width:4px&amp;quot;| &#039;&#039;&#039;0011&#039;&#039;&#039; &#039;&#039;(Tastenpaar 4)&#039;&#039;&lt;br /&gt;
 |-&lt;br /&gt;
|}&lt;br /&gt;
Die culfw unterscheidet anhand der Kommandolänge ob es sich um einen alten (12 Zeichen) oder neuen (32 Zeichen) Intertechno Befehl handelt.&lt;br /&gt;
Genauso unterscheidet das IT-Modul in FHEM die beiden Formate:&lt;br /&gt;
 define &amp;lt;name&amp;gt; IT &amp;lt;10-bit-housecode&amp;gt; &amp;lt;off-code&amp;gt; &amp;lt;on-code&amp;gt; [&amp;lt;dimup-code&amp;gt;] [&amp;lt;dimdown-code&amp;gt;]&lt;br /&gt;
und &lt;br /&gt;
 define &amp;lt;name&amp;gt; IT &amp;lt;26 bit Address&amp;gt; &amp;lt;1 bit group bit&amp;gt; &amp;lt;4 bit unit&amp;gt;&lt;br /&gt;
und setzt das Reading &amp;lt;code&amp;gt;protocol&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;V3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== FLS 100 ==&lt;br /&gt;
[[File:FLS100.jpg|right|thumb|FLS100 - konfiguriert auf IV/3]]&lt;br /&gt;
&lt;br /&gt;
Beim FLS 100 von m-e.de gibt es nur 4 mögliche Einstellungen: &#039;&#039;&#039;I, II, III und IV&#039;&#039;&#039;. Dies entspricht der Gruppe auf der Fernbedienung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 0-3&lt;br /&gt;
|-&lt;br /&gt;
| I || 0FFF &lt;br /&gt;
|-&lt;br /&gt;
| II || F0FF&lt;br /&gt;
|-&lt;br /&gt;
| III || FF0F&lt;br /&gt;
|-&lt;br /&gt;
| IV || FFF0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die nächsten vier Stellen geben die Geräte ID an; diese ist identisch mit der Taste an der Fernbedienung.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Drehschalter !! Stelle 4-7 !! Fernbedienung Taste&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0FFF || 1&lt;br /&gt;
|-&lt;br /&gt;
| 2 || F0FF || 2&lt;br /&gt;
|-&lt;br /&gt;
| 3 || FF0F || 3&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FFF0 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beim FLS 100 ist nur die letzte Stelle relevant, mit ON: F oder OFF: 0&lt;br /&gt;
&lt;br /&gt;
== REV Telecontrol ==&lt;br /&gt;
[[File:Rev-funksteckdose-telecontrol-3500-w-008345.png|right|thumb|REV Telecontrol]]&lt;br /&gt;
&lt;br /&gt;
Die REV Telecontrol haben einen Dreh-Wahlschalter auf der Rückseite, mit dem sich der Hauscode (A - D) und der Gerätecode (1 - 3) bestimmen lässt. &lt;br /&gt;
&lt;br /&gt;
Die Codierung ist dabei:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Hauscode !! Stelle 1-4&lt;br /&gt;
|-&lt;br /&gt;
| A || 1FFF&lt;br /&gt;
|-&lt;br /&gt;
| B || F1FF&lt;br /&gt;
|-&lt;br /&gt;
| C || FF1F&lt;br /&gt;
|-&lt;br /&gt;
| D || FFF1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Gerätecode !! Stelle 5-7&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1FF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || F1F&lt;br /&gt;
|-&lt;br /&gt;
| 3 || FF1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dazu (Stelle 8+9+10) noch drei statische Werte: 0FF.&lt;br /&gt;
&lt;br /&gt;
Der Code für &#039;&#039;&#039;An&#039;&#039;&#039; ist FF, für &#039;&#039;&#039;Aus&#039;&#039;&#039; 00.&lt;br /&gt;
&lt;br /&gt;
Beispiel: &lt;br /&gt;
:&amp;lt;code&amp;gt;define My_Switch IT 1FFF1FF0FF FF 00 für A1&amp;lt;/code&amp;gt;&lt;br /&gt;
Erfolgreich getestet mit CULfw V 1.49 CUL868.&lt;br /&gt;
&lt;br /&gt;
== Elro AB440 ==&lt;br /&gt;
=== Möglichkeit 1: zu Intertechno-Codes umdippen ===&lt;br /&gt;
[[File:ELRO-AB440_Funkschalter.jpg|right|thumb|Élro AB440 Funkschalter]]&lt;br /&gt;
&lt;br /&gt;
Günstige ELRO Funkschalter/Dimmer der Serie 440 lassen sich auch problemlos auf Intertechno Codierung &amp;quot;umdippen&amp;quot; und damit voll kompatibel mit allen möglichen A-P / 1-16 Intertechno Schaltcodes von Fhem aus nutzen. Dazu müssen die Dipschalter-Stellungen entsprechend Intertechno umgerechnet und gesetzt werden (1=ON, 0=OFF). &lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Intertechno  !! Elro Hauscode&amp;lt;br&amp;gt;1234  !! Elro Gerätecode&amp;lt;br&amp;gt;5ABCDE &lt;br /&gt;
|-&lt;br /&gt;
| A1  || 1111 || 111110 &lt;br /&gt;
|-&lt;br /&gt;
| A2  || 1111 || 011110 &lt;br /&gt;
|-&lt;br /&gt;
| A3  || 1111 || 101110 &lt;br /&gt;
|-&lt;br /&gt;
| A4  || 1111 || 001110 &lt;br /&gt;
|-&lt;br /&gt;
| A5  || 1111 || 110110 &lt;br /&gt;
|-&lt;br /&gt;
| A6  || 1111 || 010110 &lt;br /&gt;
|-&lt;br /&gt;
| A7  || 1111 || 100110 &lt;br /&gt;
|-&lt;br /&gt;
| A8  || 1111 || 000110 &lt;br /&gt;
|-&lt;br /&gt;
| A9  || 1111 || 111010 &lt;br /&gt;
|-&lt;br /&gt;
| A10  || 1111 || 011010 &lt;br /&gt;
|-&lt;br /&gt;
| A16  || 1111 || 000010 &lt;br /&gt;
|-&lt;br /&gt;
| C1  || 1011 || 111110 &lt;br /&gt;
|-&lt;br /&gt;
| C2  || 1011 || 011110 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Erklärungen sind z.B. im [http://isn-systems.com/tools/it2elro Tool] der Fa. ISN-systems online berechnen lassen.&lt;br /&gt;
&lt;br /&gt;
Einziger Nachteil: Die originale Elro Fernbedienung funktioniert dann nicht mehr uneingeschränkt mit den Funkschaltern (eine Intertechno Fernbedienung funktioniert uneingeschränkt). Wenn man den Hauscode an der Fernbedienung einstellt, kann man durch drücken von z.T. mehreren Tasten gleichzeitig auch Intertechno schalten. Das ist aber nur was für den Notfall oder für Handakrobaten.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;15/16 -&amp;amp;gt; D&lt;br /&gt;
13/14 -&amp;amp;gt; A+D&lt;br /&gt;
11/12 -&amp;amp;gt; B+D&lt;br /&gt;
09/10 -&amp;amp;gt; A+B+D&lt;br /&gt;
07/08 -&amp;amp;gt; C+D&lt;br /&gt;
05/06 -&amp;amp;gt; A+C+D&lt;br /&gt;
03/04 -&amp;amp;gt; B+C+D&lt;br /&gt;
01/02 -&amp;amp;gt; A+B+C+D&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Möglichkeit 2: aus der vorhanden DIP-Schalterstellung den entsprechenden 10-digit InterTechno Code bestimmen ===&lt;br /&gt;
Das ist prinzipiell ganz einfach. Hat man folgende DIP-Schalter-Stellung so muss man von links nach rechts einfach für jeden DIP gleich &amp;quot;ON&amp;quot; eine &amp;quot;0&amp;quot; und für &amp;quot;OFF&amp;quot; ein &amp;quot;F&amp;quot; definieren. Für die dargestellte DIP-Einstellung ergibt sich der damit der darunterstehende InterTechno Code:&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100101111.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00F0FFFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog dazu ergeben sich für den gleichen Hauscode (Schalter 1-5) folgende Codes für die Funksteckdosen B bis E, wobei die Dose E mit der Originalfernbedienung nicht adressierbar ist, sich mit FHEM aber wunderbar schalten lässt.&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100110111.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FF0FFF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100111011.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FFF0FF&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100111101.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FFFF0F&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ELRO_0100111110.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;0F00FFFFF0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dazu noch die Codes für AN = FF und AUS = F0 schaut eine vollständige Definition eines ELRO440 Funkschalters dann bsw. so aus:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt; define ELRO_10110_A IT 0F00F0FFFF FF F0&lt;br /&gt;
 attr ELRO_10110_A IODev CUL_0&lt;br /&gt;
 attr ELRO_10110_A alias Stehlampe&lt;br /&gt;
 attr ELRO_10110_A fp_Grundriss 340,50,1,Stehlampe&lt;br /&gt;
 attr ELRO_10110_A group Schalter&lt;br /&gt;
 attr ELRO_10110_A model itswitch&lt;br /&gt;
 attr ELRO_10110_A room Wohnzimmer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:b1-Funksteckdose-von-Toom.jpg|right|thumb|b1 Funksteckdose von Toom]]&lt;br /&gt;
== b1 / Toom ==&lt;br /&gt;
Das &amp;quot;Funksteckdosen-Set&amp;quot; der Marke b1 aus dem Toom-Baumarkt (3 Funksteckdosen + 1 Fernbedienung mit 4x ein/aus) funktioniert exakt wie ELRO, auch die DIP-Schalter sind genauso belegt. &lt;br /&gt;
&lt;br /&gt;
== Wetekom/Westfalia ==&lt;br /&gt;
[[File:Westfalia-Funksteckdose.jpg|right|thumb|Westfalia Funksteckdose ZTC-S316A.]]&lt;br /&gt;
Der eingestellte Hauscode ist F00F0FFF0F.&lt;br /&gt;
&lt;br /&gt;
In den Westfalia-Baumärkten gibt es Funksteckdosen mit Westfalia-Branding. Auf der Bedienungsanleitung steht aber Wetekom.&lt;br /&gt;
&lt;br /&gt;
Die Funksteckdosen selbst haben zehn DIP-Switches: 1234FEDCBA, während die Fernbedienung nur sechs hat: ABCDEF. Damit die Fernbedienung mit den Funksteckdosen funktioniert, darf man nur einen der DIP-Switches 1234 pro Funksteckdose auf ON schalten.&lt;br /&gt;
&lt;br /&gt;
Die Schaltung der DIP-Switches ABCDEF4321 entspricht direkt und in dieser Reihenfolge (also andersrum als direkt an der Funksteckdose) dem Hauscode und zwar entspricht ein Switch auf OFF einem F im Hauscode und ein Switch auf ON einer 0 im Hauscode.&lt;br /&gt;
&lt;br /&gt;
Die Steckdosen werden dann mit 01 ein- und mit 10 ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
define wf_steckdose IT F00F0FFF0F 01 10&lt;br /&gt;
&lt;br /&gt;
== Pollin Funksteckdosen ==&lt;br /&gt;
&lt;br /&gt;
Vom Aussehen sind die Steckdosen von Pollin (z.B. 3fach Set 550666) mit den Westfalia ZTC identisch, aber:&lt;br /&gt;
&lt;br /&gt;
* die DIP Schalter sind beschriftet von 0 bis 10;&lt;br /&gt;
* der Adresscode entspricht dem invertierten ELRO 440 Code -&amp;gt;also  (0=ON, 1=OFF)&lt;br /&gt;
* der Code für &amp;quot;An&amp;quot; ist 0F, für &amp;quot;Aus&amp;quot; F0&lt;br /&gt;
&lt;br /&gt;
Beispiel für Adresse C2:&lt;br /&gt;
&lt;br /&gt;
define IT_C2 IT 0F00F0000F 0F F0&lt;br /&gt;
&lt;br /&gt;
== me micro-electric AS 73 ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Me_AS_73.JPG|right|thumb|micro-electric Funksteckdose AS 73]]&lt;br /&gt;
&lt;br /&gt;
Die micro-electric Funksteckdosen haben 10 DIP-Schalter: 123456ABCD.&lt;br /&gt;
&lt;br /&gt;
Der Hauscode wird an Sender und Steckdose mit 1-6 eingestellt, der Empfängercode A-D entspricht den Kanälen auf dem Handsender.&lt;br /&gt;
&lt;br /&gt;
DIP-Schalterstellung OFF entspricht F und ON entspricht 0.&lt;br /&gt;
&lt;br /&gt;
Die Steckdosen werden mit F0 ein- und mit 0F ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Empfängercodes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kanal  !! Position 7-10&lt;br /&gt;
|- &lt;br /&gt;
| A  || 0FFF  &lt;br /&gt;
|-&lt;br /&gt;
| B  || F0FF  &lt;br /&gt;
|-&lt;br /&gt;
| C  || FFF0 (Achtung: bei C und D sind die Codes vertauscht)  &lt;br /&gt;
|-&lt;br /&gt;
| D  || FF0F  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Schalter_ME_A IT 0F0F000FFF F0 0F&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_ME_A IODev CUL1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_ME_A model itswitch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Conrad / McPower Funkschaltset 3+1 ==&lt;br /&gt;
Dieses Funkschaltset wird unter mehreren Namen in verschiedenen Bau- und Heimwerkermärkten sowie bei Conrad (Best Nr. 640475 - 62) vertrieben. Teilweise auch mit unterschiedlichen Schaltleistungen.&lt;br /&gt;
Die Konfiguration funktioniert genauso wie beim [http://www.fhemwiki.de/wiki/Intertechno_Code_Berechnung#FLS_100 FLS100]&lt;br /&gt;
&lt;br /&gt;
== CMI / OBI / LUX IP44-Funkschaltset 2+1 ==&lt;br /&gt;
[[File:RCS_14G_Funksteckdose_Obi_klein.png|right|thumb|Rückansicht der OBI / Lux Funksteckdose]]&lt;br /&gt;
Dieses Set wird u.a. bei OBI verkauft, als Hersteller wird die Emil Lux GmbH angegeben. Typennummer RCS-14G, Artikel Nummer 308555&lt;br /&gt;
Die Steckdosen sind IP44 geschützt und damit auch für den Außeneinsatz geeignet.&lt;br /&gt;
Die Steckdosen verfügen lediglich über einen Kanal-Schalter von 1-4. Diese Kanal-Nummeren korrespondieren mit der folgenden Übersetzung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kanal  !! Code (Stelle 1-10)&lt;br /&gt;
|- &lt;br /&gt;
| 1  || 000FF0F0FF  &lt;br /&gt;
|-&lt;br /&gt;
| 2  || 000FFF00FF &lt;br /&gt;
|-&lt;br /&gt;
| 3 || 000F0FF0FF   &lt;br /&gt;
|-&lt;br /&gt;
| 4  || 0000FFF0FF  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Steckdosen werden dann mit FF ein- und mit F0 ausgeschaltet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
:&amp;lt;code&amp;gt;define Schalter_OBI_Code_1 IT 000FF0F0FF FF F0&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_OBI_Code_1 IODev CUL1&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;attr Schalter_OBI_Code_1 model itswitch&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Noch nicht aufgeführte Geräte ==&lt;br /&gt;
Wer ein Intertechno-ähnliches Gerät besitzt, das in dieser Liste noch nicht aufgeführt ist, muss die Kodierung selbst bestimmen. Dazu gibt es verschiedene Möglichkeiten, die in diesem Abschnitt aufgeführt werden. Die Ergebnisse bitte hier eintragen, um Nachfolgern die Arbeit zu ersparen!&lt;br /&gt;
&lt;br /&gt;
=== Audio-Eingang zur Messung ===&lt;br /&gt;
Hier wird die Fernbedienung oder der Empfänger mit einer entsprechenden Schaltung an den Mikrofon-Eingang eines Rechners angeschlossen und mit einem Audio-Programm werden die Signalverläufe aufgenommen. Diese Methode wird [http://avr.börke.de/E-Funk.htm hier] näher erläutert.&lt;br /&gt;
&lt;br /&gt;
=== Platine analysieren ===&lt;br /&gt;
[[File:Westfalia-Funkfernbedienung-hinten.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von hinten.]]&lt;br /&gt;
[[File:Westfalia-Funkfernbedienung-vorne.jpg|right|thumb|Platine der Westfalia Funkfernbedienung ZTC-TC von vorne.]]&lt;br /&gt;
&lt;br /&gt;
Platine der Fernbedienung oder des Empfängers betrachten und so die Beschaltung des Decoder/Encoder Chips ermitteln. Bei der Wetekom-Fernbedienung wird beispielsweise der Chip LP801b verwendet, der funktional identisch zum PT2262 ist. Im [http://www.escol.com.my/Datasheets_specs/pt2262_1.pdf Datenblatt des PT2262] kann man dann die Beschaltung nachsehen. Nun betrachtet man den Verlauf der Leiterbahnen auf der Platine, um die Beschaltung des Chips zu ermitteln. So kann man beispielsweise bei der Wetekom-Fernbedienung sehen, dass die DIP-Switches A bis F auf die Eingänge A0 bis A5 geschaltet sind. Außerdem sieht man, mit welchen Eingängen die einzelnen Taster verbunden sind.&lt;br /&gt;
&lt;br /&gt;
Nun kann man messen, zwischen welchen Chip-Eingängen und Batteriepolen eine Spannung anliegt, bzw. (ohne Batterie) zwischen welchen Chip-Eingängen und Batteriepolen es einen Durchgang gibt, um zu ermitteln, wie die DIP-Switches schalten. Im Fall der Wetekom-Fernbedienung liegt keine Spannung zwischen den Eingängen und den beiden Batteriepolen an, wenn die DIP-Switches auf OFF stehen: Der Eingang liegt also auf F (Float). Wenn die DIP-Switches auf ON stehen, liegt nur eine Spannung zwischen dem Pluspol der Batterie und dem Eingang an, es gibt also einen Durchgang zwischen dem Minuspol und dem Eingang, so dass der Eingang auf V_SS liegt und damit 0 eingestellt ist.&lt;br /&gt;
&lt;br /&gt;
Bei den Eingängen D0 und D1 sieht man, dass der Batterie-Pluspol immer über einen Widerstand mit dem Dateneingang verbunden ist, also normalerweise 1 anliegt. Ist aber ein Ein-Taster gedrückt, wird der Eingang D1 direkt mit dem Minuspol der Batterie verbunden, bei den Aus-Tastern der Eingang D0 (die Verbindung der Aus-Taster ist auf den Bildern nicht besonders gut zu erkennen). Durch diese Verbindung wird der Eingang auf V_SS heruntergezogen und damit ist 0 eingestellt.&lt;br /&gt;
&lt;br /&gt;
=== Mit [[CUL]] im Debug-Modus Rohsignale empfangen und analysieren ===&lt;br /&gt;
* Wurde im {{Link2Forum|Topic=5599|LinkText=Forum}} diskutiert.&lt;br /&gt;
Ein 433MHz CUL kann mit dem Befehl &amp;lt;code&amp;gt;X67&amp;lt;/code&amp;gt; Intertechno Kommandos mitlesen.&lt;br /&gt;
Allerdings funktioniert das bei der &amp;quot;üblichen&amp;quot; Firmware nur lückenhaft.&lt;br /&gt;
Dazu wurde bereits eine spezielle Variante der culfw entwickelt (siehe {{Link2Forum|Topic=24436|Message=105|LinkText=Forum}}).&lt;br /&gt;
Die Ausgaben sind aber dann als doppelt so langes Binärwort im Hex-Format.&lt;br /&gt;
Man muss quasi jedes zweite Bit streichen, da die einzelnen Bits als steigende bzw. fallende Flanken übertragen werden.&lt;br /&gt;
Man kann aber damit auch einer neuen ITT-1500 ihre Kommandos und vor allem ihre 26-Bit ID entlocken.&lt;br /&gt;
&lt;br /&gt;
==== Mit CUL868 433MHz mitlesen ====&lt;br /&gt;
Man kann auch mit der 868MHz Version des CUL Fernbedienungen von Intertechno mitlesen.&lt;br /&gt;
Dazu die gewünschte Trägerfrequenz 433.92MHz * 2^16 / 26MHz = 1093745 = 0x10B071 als 24-Bit Teiler in die Register &amp;lt;code&amp;gt;FREQ[2-0]&amp;lt;/code&amp;gt; schreiben und einen Reset ausführen.&lt;br /&gt;
 W0F10&lt;br /&gt;
 W10B0&lt;br /&gt;
 W1171&lt;br /&gt;
 B&lt;br /&gt;
Danach kann man mit &amp;lt;code&amp;gt;X67&amp;lt;/code&amp;gt; auf der Frequenz mitlesen. Mit &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; kann der EEPROM wieder auf den Default 0x21656A, 868.30MHz gestellt werden.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Intertechno]]&lt;br /&gt;
[[Kategorie:HOWTOS]]&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Datei:RCS_14G_Funksteckdose_Obi_klein.png&amp;diff=16597</id>
		<title>Datei:RCS 14G Funksteckdose Obi klein.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Datei:RCS_14G_Funksteckdose_Obi_klein.png&amp;diff=16597"/>
		<updated>2016-10-11T19:12:44Z</updated>

		<summary type="html">&lt;p&gt;Loungelizard: Rückansicht Funksteckdose Obi / Lux / RCS-14G&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rückansicht Funksteckdose Obi / Lux / RCS-14G&lt;/div&gt;</summary>
		<author><name>Loungelizard</name></author>
	</entry>
</feed>