Neue Remote-Software „StartRemote Suite“

Wie hier und da bereits angekündigt, habe ich eine kleine Programm-Lösung erstellt, die es auf einfache Art ermöglicht, auf einem anderen PC Programme oder Befehle zu starten.main_programs

Man kann sich eine unbegrenute Anzahl von Buttons erzeugen und diese mit Befehlen ausstatten, die auf einem anderen PC – auch üebr Internet – Programme oder Befehle starten. Dabei ist die Größe der Buttons sowie etwa unterliegende Grafiken frei definierbar. Man kann seine Buttonleiste auch immer im Vordergrund und/oder als schlankes Fenster ohne weitere Elemente darstellen.

Der Clou ist jedoch, dass man für den Betrieb über Internet keine Portweiterleitung im Router einrichten muss, was auch außerdem z.B. mit einem IP v6 Anschluß fast unmöglich ist.

Darüberhinaus ist ein Web-Interface in Entwicklung, das es ermöglicht, die Befehle systemunabhängig z.B. von jedem Mobil-Gerät aus absetzen zu können.

Ein kurzer Überblick

Die StartRemote Suite besteht aus 3 Programmen:

StartHelper ist der „Server“-Teil und läuft als Kommandozeilenprogramm auf dem zu steuerndem PC.

StartRemote ist die „Fernsteuerung“.

ngrokHelper ist ein Hilfsprogramm für die Fälle, dass keine Portweiterleitung eingerichtet werden kann/will. Es benutzt die Freeware „Ngrok„, die einen Tunnel zum Server-PC öffnet, und eine Portweiterleitung obsolet macht. Leider ändert ngrok bei jedem Start die PublicURL/Port und man müsste per Remote-Desktop oder Teamviewer eine Verbindung schaffen, um diese Werte abzulesen.

Dies macht ngrokHelper für Euch!

Was Ihr dazu benötigt, ist ein Webspace, auf dem php-Scripte laufen können. In der StartRemote-Suite wird das php – Script „ngrokurl.php“ mitgeliefert, das den aktuellen URL/Port von ngrok vom ngrokHelper mitgeteilt bekommt und von StartRemote abgefragt wird. Somit muss man sich um nichts kümmern und hat jedesmal die automatisch die aktuellen Verbindungsdaten.

Die StartRemote-Suite kann alle erdenklichen Befehle auf dem Remote-PC ausführen – wenn an diesem ein Benutzer angemeldet ist (kann man in Windows automatisch veranlassen). Eine Installation als Windows-Service ist auch denkbar – kommt auf Eure Reaktionen an…

Meine Motivation es zu realisieren, könnt Ihr am oberen Screenshot sehen:

Ich bin oft unterwegs und möchte mir von zu Hause TV-Programme in mein Hotelzimmer streamen. Dabei ist die Leitung oft zu langsam und der Stream unterbricht immer wieder. Als Quelle dient meine FritzBox, die Kabelprogramme streamen kann (mein SAT-Receiver kann das auch, aber die FitzBox läuft ja sowieso…). Um die Bitrate des Streams zu verkleinern, benutze ich VLC, das den Stream liest, kleiner rechnet und weiterstreamt.

Mit einer Portweiterleitung auf den Streaming-Port von VLC funktioniert das ganze bereits. Aber das Umschalten ist nervig: Immer wieder mit einer Remote-Software auf den Desktop gehen, VLC beenden, einen neuen Stream lesen und weiterstreamen…

Diesen Job übernimmt nun RemoteHelper. Mit einem Klick auf einen StartRemote – Button fordere ich immer wieder einen neuen Stream an, was in Sekunden funktioniert, ohne, dass ich mich remote auf den Server verbinden müsste. Daher die Senderlogos auf den Buttons im Screenshot.

Die StartRemote-Suite bietet noch einiges mehr an Optionen. Für die vollständige Anleitung, Tutorial-Video (ab 26.12.2018) und Download, geht bitte auf

http://75r.de/software/startremote

[UPDATE] Thermostatsteuerung mit ESP8266-01

Ein kleines Update zur Heizkörperthermostatsteuerung

Ich habe die Schaltung vereinfacht und die Transistoren weggelassen und das ganze für den ESP8266-01, also die kleine „Classic“-Platine, die nur 2 GPIOs hat, angepasst.

Das Serverscript hat nun eine Abfragemöglichkeit über den Parameter …?a=gt, mit dem man die zuletzt eingestellte Temperatur  – also den Ist-Zustand – abfragen kann.

Die beiden aktuell verwendeten lua – Scripte sind auch noch einmal angefügt.

Es muss mit ESP8266Flasher.exe NodeMCU geflasht werden, um luaScript zu verwenden. Hier meine Settings beim Flashen:

NodeMCU Flasher Settings

Esp8266Flasher.exe settings für ESP8266-01

Das aktuelle Layout ohne Transistoren:

 

ESP8266_classic_Thermostatsteuerung_2018_Steckplatine

Hier die beiden Scripte, die auf dem ESP8266 werkeln:

init.lua

print('Hello! init.lua started.')
wifi.setmode(wifi.STATION)
wifi.sta.config("MY_AP_NAME", "MY_WIFI_PASSWORD")
wifi.sta.connect()

tmr.alarm(0, 1000, 1, function()
 if wifi.sta.getip()==nil then
   print("connecting to AP...")
 else
   print("AP successfully connected.")
   print ("ip: ", wifi.sta.getip())
   tmr.stop(0)

   dofile("server_v4.lua")
 end
end)

server_v4.lua

p1=3 -- 1
p2=4 -- 2
gpio.mode(p1, gpio.OUTPUT);
gpio.mode(p2, gpio.OUTPUT);

wt=21
gt=0

srv=net.createServer(net.TCP)
print ("WEBSERVER started.")
srv:listen(80,function(conn)
 conn:on("receive", function(client,request)
 local c = ""
 local buf = "";
 local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
 if(method == nil)then
   _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
 end
 local _GET = {}
 if (vars ~= nil)then
   for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
     _GET[k] = v
   end
   if(_GET.t ~= nil)then
   wt = _GET.t
   gt = wt
   if _GET.p == "on" then
       gt=wt + 0.5
       c = " checked"
   end
   if wt == "off" then
       wt = 0
       gt = 0
       c = ""
   end
     print("Argument 't' was "..gt);
     settemp(gt)
 end
end

if(_GET.a == nil)then if(_GET.a == nil)then
  buf = buf.."HTTP/1.1 200 OK\n\n"
  buf = buf.."<html><head><title>Schlafzimmer Thermostat</title>";
  buf = buf.."<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">"
  buf = buf.."<!--[if lt IE 9]>http://html5shim.googlecode.com/svn/trunk/html5.js<![endif]-->"
  buf = buf.."<link rel=\"shortcut icon\" href=\"http://SOME_URL/favicon.ico\"></head>"
  buf = buf.."<body bgcolor=\"#D0D0D0\"><font face=\"arial\"><center><h1>SCHLAFZIMMER</h1><p>Temperature is set to "
  buf = buf..gt       
  buf = buf.."&ordm;</p><form action=\"?\">"
  buf = buf.."<input type=\"button\" style=\"height:70px;width:120px;font-size:40px;\" value=\"+\" onClick=\"javascript:document.getElementsByName('t')[0].value++;\"><br>"
  buf = buf.."Temp:&nbsp;&nbsp;&nbsp;<input style=\"height:50px;width:60px;font-size:40px;margin-top:8px;margin-bottom:8px;\" type=\"text\" name=\"t\" value=\""
  buf = buf..wt
  buf = buf.."\">&nbsp;&nbsp;&nbsp;&nbsp;"
  buf = buf.."<input style=\"transform: scale(4); -webkit-transform: scale(4);\" type=\"checkbox\" name=\"p\" value=\"on\""
  buf = buf..c
  buf = buf..">&nbsp;&nbsp;&nbsp;&nbsp;+ 0.5&ordm;" buf = buf.."<br><input type=\"button\" style=\"height:70px;width:120px;font-size:40px;\" value=\"-\" onClick=\"javascript:document.getElementsByName('t')[0].value--;\">"
  buf = buf.."<br><input type=\"button\" style=\"height:40px;width:120px;font-size:28px;margin-top:8px;color:red;\" value=\"OFF\" onClick=\"javascript:location.href='?t=off'\"><br><br>"
  buf = buf.."<input style=\"height:60px;width:120px;font-size:32px;\" type=\"submit\" value=\"Set\"></form></p>"
  buf = buf.."</center></font></body></html>"

if(_GET.a ~= nil)then
  if(_GET.a ~= nil)then
    action = _GET.a;
    if action == "gt" then
      buf = buf.."HTTP/1.1 200 OK\n\n"
      buf = buf..gt
    end
end

function pulse(dir, anz)
  z=gpio.read(p1)
  for i=1, anz*2, 1 do
   if z == 0 then
     z=1
   else
     z=0
   end
   if dir == "+" then
     gpio.write(p1, z);
     tmr.delay(10000); -- 10ms
     gpio.write(p2, z);
     tmr.delay(10000);
   else
     gpio.write(p2, z);
     tmr.delay(10000);
     gpio.write(p1, z);
     tmr.delay(10000);
   end
  end
end

function settemp(temp)
 print("Setting Temp to "..temp..".")
 tt = (temp*2)-9; 
 pulse("-", 60) --init
 pulse("+", tt)
end

Mit MIDI-Befehlen Keyboard-Shortcuts auslösen

So könnt Ihr einfach mit einem beliebigen MIDI-Controller (Keyboard, MIDI-Pad, Fuß-Pedal, Drum-Computer, …) frei programmierbare Keyboard-Events auslösen oder sogar Programme/Befehle starten.

mainwindowIdee hierbei war es, zunächst Szenen in OBS mit einem kleinen MIDI-Pad anstelle mit umständlichen Keyboard-Aktionen umzuschalten. das Programm „MidiKEy2Key“ kann jedoch noch mehr.

Da ich selbst auch intensiv FSX (Microsoft Flight Simulator) mit halbem Home-Cockpit „spiele“, habe ich daran gedacht, Schaltfunktionen, die sich in FSX mit Tastaturbefehlen auslösen lassen, wie Fahrwerk ausfahren, Licht einschalten oder Landeklappen ausfahren mit einem MIDI-Controller zu steuern.

Ich benutze hierfür ein KORG nanoPad (erste Generation), welches ich für 15,-€ auf Ebay ersteigert habe.

korg-nanopad

Die Generation 2 kostet neu 55,- € und hat 4 Buttons mehr. Es sind natürlich alle möglichen MIDI-Pads geeignet, die es von allen möglichen Herstellern (AKAI, Roland, …) gibt. Das nanoPad (1) gibt es für wenig Geld, hat 12 Pads, die auf 4 Ebenen umschaltbar sind, und daher stellt es 48 schnell erreichbare Schaltfunktionen zur Verfügung.

Im Moment kann „MidiKey2Key“ zwei Arten von „Actions“ auslösen: Beliebige Tastatur-Befehle und beliebige Programme/Skripte starten.

Durch das Starten eines Skripts (z.B. ein Windows Shellskript .bat) können dadurch auch komplexe Funktionen ausgelöst werden.

Um bequem in OBS Szenen zu wechseln, genügen die Keyboard-Shortcuts. Um in FSX „analoge“ Einstellungen mit einem Drehregler zu machen, müsste ich „MidiKey2Key“ entsprechend erweitern. Dies käme auf Euer Feedback an. Benutzt die Feedback-Funktion auf der MidiKey2Key Homepage oder die Antwort-Funktion hier, um Vorschläge zu machen!

Hier ist ein Tutorial-Video (englisch):

 

MidiKey2Key – Homepage (englisch/deutsch) mit Download, Anleitung und Feedback-Möglichkeit:

http://75r.de/midikey2key

Twitch schnell gestreamtes Spiel und Kommentar ändern mit TwitchControl

Wenn Ihr einen Twitch-Kanal betreibt und öfter das Spiel ändert, welches Ihr streamt, ist es lästig , die ständig auf Eurer Twitch Seite manuell zu ändern.

Dafür habe ich schon vor einiger Zeit „TwitchControl“ geschrieben, welches ich hier kurz vortellen möchte.

Ihr könnt es hier downloaden: http://75x.de/dl/twitchcontrol.

Entpackt am besten alle Files, die in dem zip-File enthalten sind, in einen eigenen Ordner. Dann solltet Ihr eine Verknüpfung zu TwitchControl.exe auf den Desktop oder in das Startmenü legen (z.B. mit gehaltener rechter Maustaste das .exe File ziehen und nach dem Ablegen „Verknüpfung erstellen“ wählen).

Nun ist das Programm startbereit. Voraussetzung ist natürlich, dass Ihr einen Twitch-Account besitzt.

TwitchControl

Auf der linken Seite können beliebig viele Presets erzeugt und schnell abgerufen werden. Ein paar sind bereits als Beispiel angelegt.

Zu Neu-Erstellen auf „New“ klicken, einen Preset Name, sowie Titel und das Spiel eingeben. Durch Klicken auf „Save“ wird dieses Preset gespeichert und erscheint links in der Liste.

Damit Ihr das Programm benutzen könnt, muss es einmalig authorisiert werden, Ihr müsst ihm erlauben, Eure Twitch-Kanal-Einstellungen verändern zu dürfen. Der Dialog erscheint automatisch und muss nur einmalig bestätigt werden.

Nach Auswahl eines Presets, Eintragen Eures Twitch-Kanal-Namens und Klick auf „Activate“ wird auf Eurer Twitch-Seite Title und Game entsprechend eingetragen.

Vielleicht mache ich noch ein Video; die Benutzungvon „TwitchControl“ ist jedoch recht simpel, finde ich.

(Edit Juli 2018)

Version v1.08 wurde veröffentlicht.

Ein Bug wurde behoben, wo beim ersten Start von Twitchcontrol der Dialog zum Autorisieren von TwitchControl bei Twitch nicht gezeigt wurde. Er kam zwar beim nächsten Start, das hat jedoch nicht jeder ausprobiert (siehe Kommentare hierzu). Auch die Fehlermeldung mit „:500“ wurde untetdrückt.

Außerdem wurde die Möglichkeit eingebaut, TwitchControl mit einem Startparameter zu starten. Gibt man über eine Verknüpfung, über ein CMD Fenster, einer Batch oder mit MidiKey2Key als Parameter einen Presetnamen an, wird bei Twitch auf dieses Preset geschaltet, ohne, dass irgendwelche Ausgaben erscheinen – auch keine Feblermeldungen. Enthält der Presetname Leerzeichen, muss er in Anführungszeichen stehen. Also z.B. TwitchControl.exe „CS GO“

Was bleibt, ist noch eine Abmeldefunktion einzubauen. Denn nach einmaliger Autorisation ist TwitchControl mit dem Twitch-Account untrennbar verbunden. Das de-Autorisieren ist etwas kompliziert und bedarf noch der Recherche in der Twitch API, wie das überhaupt funktioniert…

Aufbau 3D-Drucker P3 Steel #03 – Hotend und Heizbett

Das Hotend ist fertig – bis auf die Kabelzusammenführungen, da das LED-Licht noch fehlt und dessen Kabel ja auch mitkommen soll. Der Thermistor und die Heizpatrone wurden mit dem unteren Teil des MPX-Steckers verbunden; die Heizpatrone bekommt 4 der 6 Anschlüsse, damit es keine Stromprobleme gibt.

Beim Heizbett habe ich mich anstelle des etwas günstigeren MK-II mit Glasplatte für eine prazisionsgefräste Aluplatte entschieden, die mit einer 200W Silikonheizmatte erwärmt wird. Dieses ist in der Lage z.B. auch ABS zu verarbeiten und heizt im Vergleich schneller auf. Oben auf die Aluplatte wird eine BuildTak-Matte geklebt. Sie hat optimale eigenschaften und macht Blue Tape, Malerkrepp oder Haarspray obsolet.  Unter der Aluplatte klebt die selbtklebende Heizmatte:

Heizbett1_IMG_9210

Darauf habe ich mit Selundenkleber eine 3mm Korkplatte geklebt.

Heizbett2_

Dann kommt ein selbstklebendes Thermovlies, welches an der Klebeschicht ein Kunstfasergewebe besitzt und abschließend eine Alufolie. Es ist ringsherum etwas größer, als das Heizbett und die Korplatte und klebt somit am Rand umschließend wieder am Alublech. Schön mollig eingepackt:

Heizbett3_IMG_9212Das Buildtak ist oben noch nicht aufgebracht, es ist zunächst noch die Schutzfolie drauf.Heizbett eingebaut_IMG_9215

Die Z-Achsen-Endstopstellschraube hat eine Feder bekommen und das Heizbett wurde auf den Schlitten gesetzt.

Hier noch eine Gesamtansicht des aktuellen Stadiums; ich warte nun darauf, dass endlich die Elektronikboards kommen…

Totale_IMG_9213

 

Aufbau 3D-Drucker P3 Steel #02 – Erste Anbauteile

Den Rahmen hatte ich aus Spaß komplett zusammengebaut. Ein paar Teile fallen jedoch weg, da sie durch Toolson’s Kunstoffteile ersetzt/ergänzt werden. Einige Schrauben müssen außerdem kurzfristig wieder entfernt werden, da sie Kunststoffteile mittragen.

So zum Beispiel die Umlenkrolle vorne:

Man hat Y-Umlenk_IMG_9173es etwas einfacher, den Riemen einzufädeln, wenn man das macht, bevor man die M6-Schraube und die Lager einbaut. Ich habe jedoch einen kleinen Trick gefunden, mit dem das auch im zusammengebauten Zustand gut geht.

 

 

Die mühsam angebrachten Lagerhalterungen am Schlitten kommen wieder herunter, da Toolson doch Teile für die LM8UU-Lager hat (und nicht nur für die IGUS-Lager), das hatte ich falsch verstanden. Sie besitzen 6-eckige Aussparungen für M3-Muttern, die bei mir jedoch nicht sofort hineinpassten. Sie lassen sich einfach mit einem Lötkolben erwärmen und eindrücken. Nur muss man das vorsichtig und zügig machen, damit das Kunststoffteil nicht kaputtschmilzt.Mutter mit Lötkolben einpressen_IMG_9171

Der Riemenspanner wird, falls es mehrere Bohrlöcher gibt, der Nase zugewandt angebracht, die letztlich nach hinten zeigt. Der fertige Schlitten sieht von unten so aus:SChlitten lose v. unten_IMG_9172

Wenn es, wie hier beim Riemenspanner, eingelassene Muttern gibt, habe ich zuerst eine längere Schraube ins Bauteil gedreht, die Mutter am anderen Ende aufgesteckt und sie mit der Schraube vorsichtig in’s Material gezogen.

Die weiteren Kunststoffteile wurden vorbereitet bzw. angebracht. Ebenso habe ich die 8mm Wellen für die Z-Achse angebracht. Dazu musste ich jeweils unten etwas auffeilen. Wenn diese Löcher zu groß werden, ist es nicht so schlimm, da die Wellen auf den Motoren aufliegen und nicht durchrutschen können.

Hier nun ein paar Bilder:

Das letzte Bild zeigt den Riemendpanner der Y-Achse. Durch die Schlaufe der Riemenenden ist jeweils ein halber Nagel geschoben, somit kann der Riemen nicht mehr herausrutschen.

Auf dem einen Bild oben ist der Z-Endstopschalter noch intakt. Plötzlich sehe ich, das die Blechfahne ganz nach hinten zeigt. Als ich sie zurückbiege, bricht sie ab 😦 Ich habe mir dann einen Streifen Blech aus einer ATX-Blende eines ausrangierten Mainboards geschnitten, ein Loch hineingebohrt und dieses Stück etwas gebogen. Es wird nun von einer der beiden Schrauben getragen, die auch das kleine Endstopboard halten. Funktioniert wie das Original. Guckst Du:

Im nächsten Beitrag gibt es Bilder vom fertigen Hotend und des Heizbettes.

Heizungsthermostatsteuerung mit ESP8266 für unter 5,- EUR

Um mir die Zeit zu vertreiben, bis die Teile für den 3D-Drucker eintreffen, habe ich mich ein bisschen mit chinesischen Chips beschäftigt.

Hierbei fiel mir der ESP8266 auf, den es in verschiedenen Versionen gibt.

Es ist ein Mikrocontrollermodul, welches WLAN eingebaut hat und sich ähnlich wie ein Arduino programmieren lässt. Er wird auch oft hergenommen, um dem Arduino WLAN beizubringen. Wenn es dann um simple Schaltvorgänge oder Auslesen von Sensoren geht, ist der Arduino oft überflüssig, denn das kann der 8266 auch, und das zum erstaunlichen Preis!

Out-of-the box besitzt er einen AT-Befehlssatz, ähnlich wie Modems. Bequemer geht es aber, wenn man die NodeMCU – Firmware flasht. Dann kann man das Modul mit lua-Scripten füttern, was bequemer ist und mehr Möglichkeiten bietet.

Das tolle: Der 8266 kann im 2,4 GHz WLAN wahlweise als LAN-Client, als WLAN-Accesspoint oder sogar beides gleichzeitig sein. Die Bedienung ist dabei kinderleicht. Er gibt z.B. eine Liste der Accesspoints in der Nähe aus und man verbindet ihn mit einem davon (wenn das Kennwort bekannt ist). Oder er wird als Accesspoint sichtbar und man verbindet z.B. sein Handy mit diesem und erhält von seinem integrierten DHCP-Server eine IP-Adresse. Mit ein paar Zeilen Code lässt sich ein simpler Webserver realisieren, über den man dann mit ihm interagiert. Sogar die WLAN-Reichweite ist beeindruckend. Sie entspricht zu hause etwa meinem Mobiltelefon.

Da es Varianten mit bis zu 9 GPIOs (Ein- und Ausgänge für Sensoren oder Schalter) gibt, ist z.B. denkbar, ihn im Hausflur zu installieren. Er überwacht per Taster oder Reedkontakt, zu welchen Zeiten die Tür geöffnet wird, besitzt einen Temperatur- und Lichtsensor und berichtet alle 15 Minuten die Messdaten zu einem SQL-Server im Netz. Daneben läuft ein Webserver, der auf Button-Action per Relais den Haustürsummer betätigt. All dies ist mit wenigen Codezeilen möglich und benötigt eben keinen zusätzlichen Arduino.

Die kleinste Variante ESP8266-01 hat 2 GPIOs und kostet in China ca. 1,70 EUR.

Nachteil des ganzen ist sein durch das ständig aktive WLAN sein Stromverbrauch, der immer um die 100 mA liegt. Damit würden 2 AA-Batterien nach zwei Tagen leer sein. Der 8266 benötigt also ein Netzteil. Außerdem läuft er mit 3,3V (auch an den Kommunikationspins!), was noch etwas an Bauteilen benötigt, aber nicht schlimm.

Inspiriert durch ein Youtube Video von Allan Turing habe ich an einen eq-3 Heizungsthermostat Model K 3 Leitungen an den Drehimpulsgeber, mit dem man den Thermostat manuell steuern kann, gelötet und nach außen geführt. Die nötigen Impulse auszugeben, um den Thermostat zu steuern, ist für den 8266 ein leichtes.

Mit einer einfachen Weboberfläche kann der Thermostat manipuliert werden. Also auch vom Smartphone aus, oder eben von der ganzen Welt aus.

In diesem Video ist der erste Versuchsaufbau zu sehen, noch ohne Webinterface, sondern nur selbstlaufend in einem Demo-Modus:

Hier die Schaltung dazu:

ESP8266-EX_02_Thermostatsteuerung_Steckplatine

Es wurde ein ESP8266-EX benutzt, was aber nicht nötig ist, da nur 2 Ausgänge benötigt werden. An diesen hängt übrigens ein NPN-Transistor, der den jeweiligen Drehgeberausgang im Rhytmus nach Masse schaltet.

Das rote Modul rechts ist bloß der USB-to-Serial-Converter zum Aufspielen des Scriptes. Zum Betrieb fällt es weg Zu sehen ist außerdem noch ein 5V to 3,3V Modul, was aus 5V 3,3V macht, wenn man kein Netzteil hat, was direkt 3,3V liefert.

Vielleicht mache ich noch ein Video mit dem laufenden Webinterface.

Wen das lua-Script interessiert, das auf dem 8266 werkelt, hier ist es:

p1=1 -- GPIO05 ganz aussen
p2=2 -- GPIO4
gpio.mode(p1, gpio.OUTPUT);
gpio.mode(p2, gpio.OUTPUT);
wt=21
srv=net.createServer(net.TCP)
print ("WEBSERVER started.")
srv:listen(80,function(conn)
 conn:on("receive", function(client,request)
 local c = ""
 local buf = "";
 local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
 if(method == nil)then
 _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
 end
 local _GET = {}
 if (vars ~= nil)then
 for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
 _GET[k] = v
 end
 if(_GET.t ~= nil)then
 wt = _GET.t
 gt = wt
 if _GET.p == "on" then
 gt=wt + 0.5
 c = " checked"
 end
 print("Argument 't' was "..gt);
 settemp(gt)
 end
 end
 buf = buf.."<html><center><h1> ESP8266 Thermostatsteuerung</h1>";
 buf = buf.."<p><form action=\"?\">Temp: <input style=\"height:50px;width:60px;font-size:40px;\" type=\"text\" name=\"t\" value=\""
 buf = buf..wt
 buf = buf.."\">&nbsp;&nbsp;&nbsp;&nbsp;<input style=\"transform: scale(3); -webkit-transform: scale(3);\" type=\"checkbox\" name=\"p\" value=\"on\""
 buf = buf..c
 buf = buf..">&nbsp;&nbsp;&nbsp;&nbsp;+ 0.5°<br><br><input style=\"height:60px;width:100px;\" type=\"submit\" value=\"Set\"></form></p></center></html>";

 client:send(buf);
 client:close();
 collectgarbage();

 end)
end)

function pulse(dir, anz)
 z=gpio.read(p1)
 for i=1, anz*2, 1 do
 if z == 0 then
 z=1
 else
 z=0
 end
 if dir == "+" then
 gpio.write(p1, z);
 tmr.delay(5000); -- 10ms
 gpio.write(p2, z);
 tmr.delay(5000);
 else
 gpio.write(p2, z);
 tmr.delay(5000);
 gpio.write(p1, z);
 tmr.delay(5000);
 end

 end
end

function settemp(temp)
 print("Setting Temp to "..temp..".")
 tt = (temp*2)-10;
 pulse("-", 60) --init
 pulse("+", tt)
end


Es fehlt nur das init.lua, was bei Inbetriebnahme der Schaltung zu meinem WLAN verbindet; das sind aber nur 5-6 langwelige Zeilen.