Scratch Extensies

Scratch is een programmeertaal voor kinderen, of anderen die willen kennismaken met het programmeren van een computer. Zoals ik eerder schreef wordt het pas echt leuk op het moment dat je vanuit je Scratch programma iets buiten je computer kan besturen. In deze post heb ik beschreven hoe dit kan met de offline versie van Scratch. Extensies (JavaScript extensie) blijken echter ook prima te werken in de online versie van scratch.

Hoe dat moet? Dat beschrijf ik hier in het onderstaande stapppenplan.

    1. Ga naar de scratch website: http://scratch.mit.edu
    2. Klik op ‘Create’.
    3. Als de ‘Scratch Project Editor’ is gestart druk je op de F12 toets. Nu verschijnt er onderin je webbrowser een nieuw scherm (zie screenshot).
      Screenshot from 2014-10-10 09:31:35
    4. Type het onderstaande commando op de onderste regel van van het scherm (zoals is te zien in de screenshot hieronder), en druk op enter. Op deze manier wordt een JavaScript extensie geladen.
      ScratchExtensions.loadExternalJS("https://raw.githubusercontent.com/LLK/scratch-extension-docs/master/weather_extension.js")

      Screenshot from 2014-10-10 09:35:05

    5. Druk wederom op de F12 toets om de ‘developer tools’ te sluiten. En klik op ‘more blocks’. Er is nu een extra blokje zichtbaar geworden wat zojuist is geladen (zie screenshot).Screenshot from 2014-10-10 09:38:17
    6. Het nieuwe blokje kan worden gebruikt in een Scratch programma. In dit geval wordt het weer (de temperatuur in Fahrenheit) bepaald. Wederom, zie onderstaande screenshot voor een voorbeeld programmaatje (wanneer op het vlaggetje geklikt wordt roept het katje de huidige temperatuur in Boston).Screenshot from 2014-10-10 09:42:06
    7. Een scratch programma waarin extensie worden gebruikt kan normaal worden opgeslagen op de Scratch website. Omdat er gebruik wordt gemaakt van extensies, die nu nog experimenteel zijn, is het niet mogelijk om deze Scratch programma’s via de Scratch website te delen.
    8. Bij het opnieuw laden van het Scratch programma moeten stap 3, 4, 5 opnieuw worden uitgevoerd. Dit kan worden opgelost door gebruik te maken van GreaseMonkey, een plugin voor de firefox webbrowser (er is vast ook wel een vergelijkbare tool voor andere browsers) waarmee extra JavaScript (het laden van een paar extensies bij het openen van Scratch) kan worden uitgevoerd.

Op dit moment zijn de Scratch extensies nog experimenteel. Voor zover ik kan beoordelen is het Scratch team zeer zorgvuldig met het toevoegen van nieuwe functionaliteit, wat bij dit soort extensies helemaal belangrijk is. De laatste berichten zijn dat extensies in 2015 worden toegevoegd aan de officiele versie van Scratch.

 

Scratch

Scratch (link) is een omgeving voor kinderen om kennis te maken met programmeren.Het is een visuele programmeertaal waar je doormiddel van het slepen, en aan elkaar koppelen van allerlei blokjes een programma kan maken. Bijvoorbeeld om een animatie te besturen, of een eenvoudig spelletje te maken. Scratch draait in een webbrowser (geen extra software nodig), maar kan ook als een offline programma draaien.

Scratch is leuk, maar het wordt pas helemaal leuk als je vanuit je scratch programma kan samenwerken met dingen buiten je computer:  een website, een robot, een thermometer, noem maar op. De offline versie van Scratch heeft voor dit doel de HTTP extensie waardoor het mogelijk wordt om speciale blokjes te maken die informatie uitwisselen met websites.

Omdat de HTTP extensie experimenteel is in de huidige versie van Scratch, en deze daarom nogal verborgen zit in de software beschrijf ik hierbij hoe een HTTP extensie kan worden gemaakt.

De HTTP extensie bestaat uit een JSON document waarin de nieuwe blokjes worden gedefinieerd, en de locatie van de webserver wordt opgegeven. Bijvoorbeeld:

{ 
  "extensionName": "Mijn module",
  "useHTTP":true,
  "host": "192.168.1.44",
  "extensionPort": 1880,
  "blockSpecs": [
    [" ", "Sonos %s", "scratchSonos", "Hallo Scratch"]
  ]
}

Een meer gedetailleerde specificatie is ook beschikbaar (link). In het kort is de betekenis dat het gaat om een extensie met de naam ‘Mijn module’. Het is een HTTP extensie (useHTTP is true), die beschikbaar is op ip adres 192.168.1.44, en poort 1880. In blockSpecs staat een lijst van blokjes, met per blokje een lijstje parameters per blokje. Achtereenvolgens zijn dat type, format, functie, gevolgd door 0 of meer default waarden.

Op het moment dat Scratch dit blokje gaat uitvoeren wordt een HTTP GET call gedaan naar adres:

http://192.168.1.44:1880/scratchSonos/Hallo%20Scratch

De JSON extensie kan in de offline versie van Scratch worden geladen door het menu ‘Bestand’ te klikken terwijl de linker shift-toets is ingedrukt. Door het indrukken van de linker shift-toets verschijnt de extra menu optie ‘Import experimental HTTP extension’ die dan ook moet worden gekozen.  Selecteer nu het JSON bestand, en klik op OK. Onder ‘Meer blokken’ is nu het nieuwe blok te vinden. Zie bijgevoegde screenshots.

scratch1
Klikken op Bestand met de linker shift toets ingedrukt geeft de extra optie ‘import external scratch extension’ waarmee het mogelijk wordt om een HTTP extensie te laden.
Na het succesvol laden van de HTTP extensie zijn nieuwe blokjes zichtbaar in de categorie 'Meer blokken'
Na het succesvol laden van de HTTP extensie zijn nieuwe blokjes zichtbaar in de categorie ‘Meer blokken’

Een snelle voorbeeld scratch applicatie is die waar door klikken op de ‘kat’ wordt gevraagd om je naam in te vullen. De ingevulde naam wordt vervolgens via de HTTP extensie naar een text-to-speech engine gestuurd die via Sonos (een draadloos speakersysteem) de tekst weer uitspreekt. Dit laatste is niet beschreven in deze post, dat komt vast een andere keer.

scratch3
Een scratch programma waarin een blokje uit de HTTP extensie wordt gebruikt.

 

 

 

Remote control van Haas&Sohn Pelletkachels

Haas&Sohn pelletkachels zijn goede en, door het ontbreken van een ventilator, zeer stille pelletkachels. Een van de onderdelen die ontbreekt op de Haas&Sohn pelletkachel is een goede afstandsbediening of remote control. Bijvoorbeeld om vanaf de bank/bed of onderweg naar huis de kachel alvast aan te zetten, de status uit te lezen, en/of temperatuur in te stellen. Haas&Sohn levert welliswaar een GSM module waarmee doormiddel van SMS de kachel is aan te sturen, maar de kosten voor deze module zijn astronomisch: met een prijs van EUR 600 of hoger voor bediening via een ‘ouderwets’ SMSje is niet meer van deze tijd.

2013-11-05 09.39.56
Zo ziet de bediening van de pelletkachel eruit op een iphone.

Dat moet anders kunnen, en gelukkig kan dit ook! Met een door mij gemaakte module die op een Haas&Sohn wordt aangesloten is het mogelijk om via andere computer in huis, smartphone of vanaf Internet de kachel te besturen (Temperatuur opvragen, status opvragen, verwarmingsmodus instellen).

 

Installatie

De module wordt eenvoudig (met een kabeltje) aangesloten op een Haas&Sohn pelletkachel. Aanpassingen aan de kachel zelf zijn niet nodig. Naast aansluiten aan de kachel wordt de module worden aangesloten op het huisnetwerk (draadloos of bedraad).

Vragen en verkrijgbaarheid

Heb je interesse in deze module, of voor meer informatie. Stuur dan even een mailtje naar pieter@meulenhoff.org

 

 

Range Anxiety

Through OVMS it is possible to log the status (range, location, battery condition) of an electric vehicle (in our case a Renault Twizy). With all this data at hand, it is possible to make all sorts of analysis, and as a result get more insight in all aspects of electric mobility.

To get more insight in the area that can be effectively reached with our Twizy, I made a contourplot where the SOC (state of charge, varies between 0% for empty and 100% for a full battery) is plotted as a function of geographical location. Source data is from three weeks Twizy driving. The plot below is a first result.

State of Charge contourplot (click to enlarge)

In the plot above the red areas are regions where more charge is available. The yellow areas are regions with less charge abailable. The small circles in the plot are popuplar charging locations (e.g. home, work).

Unfortunately, the program that created the contourplot from the raw data (latitude, longitude, SOC) made a cutt-off on the side (top, right and bottom left). This is probably caused by not enough data in these areas.

Connecting the Twizy

A post on the twizyowners forum about timed charging the Twizy triggered me to document me recent progress in Twizy and home automation hacking and write this post. In this post i’m trying to explain how I connected the Twizy to my home automation system, and controlled charging of the Twizy. Until recently we just plugged in the AC cable of the Twizy when arriving at home (in fact we still do). But what annoyed me was that a ventilator kept on running for hours and hours while Twizy charging was completed. What I wanted to do was disconnect the plug from the socket when charging was finished to avoid (from my perspective) unneeded energy consumption. The most simple and robust method for achieving this is walk to the garage and unplug the Twizy. I decided to do it automagically via home automation. A complete schematic of the whole setup is depicted below.

Connecting the Twizy to a home automation system can be approached from two perspectives: 1) receiving status updates from the Twizy and 2) controlling the Twizy

Receiving status updates from the Twizy

Our Twizy is extended with a so called OVMS Module. The OVMS module is a small device (with GPS and GPRS) that talks to the CAN-bus of the Twizy. OVMS stands for the openvehicle open source hardware/software project. Details on this project and how to get the OVMS module are available on the open vehicles website (http://www.openvehicles.com).

By default the OVMS module is configured to log status updates (GPS location, State of charge, Temperature, Speed, Odometer, and much more) over the Internet to a central server hosted by the open vehicles project. When communicating with the Twizy, you connect to the OVMS server instead of the car. A sample client application in Perl is provided on the github site of the project (client_app.pl). In order to get this client running you probably need a Linux compatible system, install the required perl modules, and create a small configuration file (ovms_client.conf) where you must enter the location of the OVMS server and your OVMS module credentials. The client_app program does not really ‘do’ something. When started, it connects to the OVMS server, decodes and prints out status update messages from the Twizy.

In order to connect the Twizy to my home automation system I modified the client_app.pl script so that the content of messages is decoded into understandable data (GPS location, charge status, speed, odometer, etc) and the the Twizy status is made available to other applications via an MQTT message broker (mosquitto). My modifications to the script can be downloaded here (client_app_mqtt.zip).

Control the Twizy

For now the only Twizy control I need is switching the AC socket for charging. For this purpose I make use of a Conrad/ELV FS20 wireless switching socket (link). This switch is triggered by an 868Mhz OOK encoded protocol. Luckily, the JeeLink is capable of transmitting this protocol.

The OVMS client application contains a rule that when the state of charge (SOC) reaches 100%, an MQTT message with the topic ‘FS20’ is being sent. The contents of the message is a JSON encoded structure with the details of the FS20 message (address of the socket and command 0 for off and 17 for on)

if ( $status->{soc} == 100 ) {
  mqttpublish('FS20',"{"hc":4865,"addr":0,"cmd":0}","FS20");
} else {
  mqttpublish('FS20',"{"hc":4865,"addr":0,"cmd":17}","FS20");
}

The JeeLink – MQTT bridge script (see this post)  subscribes to the ‘FS20’ MQTT messages and forwards them to the JeeLink. A modified version of the JeeLink-MQTT bridge which encodes FS20 messages is available here. The JeeLink then transmits a FS20 protocol message and the socket is switched.

Kosten en Baten van PV zonnepanelen

Bij deze een aangepaste versie van de excel-sheet met daarin een berekening van de kosten en baten van PV-zonnepanelen. De opgenomen berekeningen kunnen helpen bij het overwegen van de aanschaf van zonnepanelen en geven antwoord op de volgende vragen:

  • Wat is de gemiddelde stroomprijs voor stroom van zonnepanelen?
  • Wanneer is de aanschaf van zonnepanelen weer terugverdiend?

Voor het maken van een berekening, moeten een aantal gegevens in worden ingevuld:

  • Prijzen van aanschaf, plus installatie, minus subsidie van de zonnepanelen.
  • Verwachte opbrengst in kWh per jaar. Typisch 80% á 90% van het opgegeven vermogen, afhankelijk van de installatie en de ligging van de panelen.
  • Het rentepercentage in het geval dat het geld op de bank was gezet in plaats van zonnepanelen te kopen (bijvoorbeeld 4% voor een deposito van 10 jaar)
  • Stroomprijs, en de ontwikkeling daarvan (bijvoorbeeld 0.23 met een jaarlijkse groei van 2.5%)
  • Afschrijftermijn: de periode waarover de kosten van de zonnepanelen worden afgeschreven, en waarvan verwacht wordt dat de zonnepanelen het doen (bijvoorbeeld 25 jaar)

Download de excel-sheet, en pas de gegevens aan naar je eigen situatie.,

Download link: Kosten-Baten-Zonnepanelen

N.B. De ontwikkeling van de stroomprijs van de afgelopen jaren is ook ingevoegd.

A perl JeeNode MQTT bridge

This is a perl implementation of a bridge between the MQTT pub/sub message bus and the JeeNode wireless network. This MQTT bridge makes it a lot easier for me to implement home automation logic. Where device specific features (heating system, radiator valves,. washing machine, energy metering, electric vehicle, status display) are implemented most with JeeNodes, the logic that binds everything together (and makes home automation working) can be done in a higher level scripting or programming language.

An example of this logic i’m using is to switch off an AC wall outlet at the moment our electric vehicle reports that it is fully charged: Our EV is monitored through a client script watching the OVMS server (see my previous post). MQTT messages containing the battery status, car location, current speed, odometer are sent at regular intervals. At the moment the battery capacity reaches 100%, an MQTT message is sent which triggers the car charger AC outlet to be switched off.

The bridge implementation can be used to forward packets in both directions: MQTT messages of specific topics are forwarded as packets in the wireless JeeNode network. Packets received from other JeeNodes are forwarded as MQTT messages.

The MQTT bridge implementation is written in perl and should run on at least any Linux like server. makes use of two seperate threads, one for communicating with a JeeLink attached to a USB port. The JeeLink runs the standard RF12demo sketch. The second thread waits for subscribed MQTT messages sent by a MQTT server (in my case mosquitto) and forwards these via a queue to the first thread.

The perl script depends on several perl modules, most important are WebSphere::MQTT::Client, and Device::SerialPort. Both can be installed through the commands.

perl -MCPAN -e "install Device::SerialPort"
perl -MCPAN -e "install WebSphere::MQTT::Client"

The perl script can be downloaded here

 

 

 

 

 

 

 

Twizy verkoopaantallen

Dit weekend kwam in het nieuws dat de elektrische auto dreigt te floppen in duitsland (link). Voor mij de reden om eens naar de verkoopaantallen van elektrische auto’s te kijken, en wel de Renault Twizy (link) waar we recent een proefrit in hebben gemaakt (link).

Gelukkig heeft Renault de verkoopcijfers, waaronder de Twizy, netjes op haar website beschikbaar (link). Om een indruk te krijgen hoe goed het gaat met de verkoop zijn de maandelijkse verkoopaantallen tegen de tijd uitgezet. Voor de vergelijking heb ik de maandelijkse verkoopaantallen in Frankrijk en Duitsland er even naastgezet.

Wat me direct opvalt is dat de verkoop aan het eind van het jaar compleet is ingestort (is dat normaal voor autoverkopen?). De Twizy, met open ramen, zou naar verwachten het juist goed doen in de wat warmere landen. Maar Duitsland doet het qua verkoop zeker niet onder voor Frankrijk. In totaal zijn er in 2012 bijna 10.000 Twizy’s verkocht wat haar (voor 2012) de best verkopende elektrische auto heeft gemaakt.

Update Januari 2013: De verkoop van de Twizy is “geexplodeerd” in Nederland. Het aantal verkochte autos is bijna verdubbeld ten opzichte van december 2012. Het gaat echter nog steeds om zeer lage aantallen (22 tegen 13). De verkoop in Duitsland, Frankrijk en de rest van de wereld is verder gedaald (ruwweg gehalveerd).