Winter in Fitou

Januar und Februar sind die kälteste Zeit in Fitou. Die Temperaturen sinken in der Nacht schon mal auf unter 5°C. Wenn die Sonne scheint, sind es um die Mittagszeit knapp 20°C und die Sonne prickelt auf der Haut. Normalerweise ist es recht windig im Winter (Tramontana). In diesem Jahr war es bislang allerdings sehr mild und kaum windig.

Warum rede ich übers Wetter?

Ich sass ein paar Wochen lang sehr, sehr lange vor dem Computer und habe gearbeitet (Websites & Serverkram). Seit einer Woche arbeite ich wieder im Haus und baue an Elektrik und Wasserversorgung. Ich falle dann immer schnell in so einen Rhythmus, bei dem ich gern viel schaffe und viel erledige. Das klappt auch ganz gut. Letzten Freitag wollten wir nachmittags zu Ikea fahren (120km nach Montpellier) um Teile für die Küche zu kaufen.

… und jetzt kommt die Stelle mit dem Wetter …

Manchmal macht es so “schnipps” – und dann realisiere ich, wo ich wohne. Es war so schön draussen, das wir beschlossen einfach spazieren zu gehen und den Einkauf zu verschieben.

Almond tree

Die Mandelbäume fangen an zu blühen, die Vögel zwitschern, es duftet nach Thymian, Rosmarin und all diesen Kräuter, deren Namen ich mir nicht merken kann, deren Gerüche ich aber mittlerweile kenne. Die Wege in der Garrique sind sehr alt und ausgetreten. Es ist eine eine Gegend, in der seit tausenden Jahren Menschen gewohnt haben.

Garrique
Überall stehen alte Steinmauern als Begrenzungen früherer Siedlungen, Felder, Schafweiden und verlassenen Weinfeldern. Es ist eine steinige Landschaft ohne grössere Bäume und es regnet nicht oft. Die Pflanzen die hier überleben, sind meist sehr alt und robust.
Hier passiert nichts schnell und manchmal tut mir diese Erkenntnis gut.

Ausser “hach” fällt mir meistens dazu nichts ein. Diesmal habe ich es (dank meines wunderbaren Telefons) allerdings geschafft zwei drei Bilder zu machen und so kam es zu diesem bräsigen Blogeintrag 🙂

Scheinbar geht es nicht nur mir so, daher hier noch ein paar Instagram Fotos aus der Gegend von letzter Woche. 

A photo posted by Arnaud Cornel (@arnaudcornel) on

A photo posted by Olivier Gillot (@ogillot) on

A photo posted by jadounettte (@jadeizia_mua) on

A photo posted by @carlottapaolieri on

Problem with Update from OwnCloud 8.2.1 to 8.2.2 – [solved]

I was a bit desperate today, while trying to update my owncloud from version 8.2.1 to 8.2.2. I always got this message in red characters.

Update failed.
Unable to move /DOCUMENTROOT/_oc-upgrade/8.2.2.2/core/resources to /DOCUMENTROOT/resources

First I thought the problems were wrong permissions, but the solution is much easier. The owncloud version number in the file

[DOCUMENTROOT]/owncloud/apps/updater/lib/location/core.php

must be 8.2  (see screenshot above)!

In my file it was 8.1. Just change it and start the update again, then it will work 🙂

Lumiere London

Der Plan war im Dezember 2015 nach Lyon zur La Fête des Lumières zu fahren. Wegen der Attentate in Paris fiel das Event allerdings leider aus.

Am Mittwoch sah ich dann ein Foto von den Vorbereitungen zu Lumiere London, einem aehnlichen Event in London.

Preparations are underway for #lumierelondon #lumiere #oxfordstreet

A photo posted by isapisa (@murgeys) on

Es gibt so Situationen, da denke ich

Das muss ich sehen!

Und nach etwas Organisation und Umplanerei im Kalender hat es tatsaechlich geklappt.

Es gab 31 Lichtinstallationen und die Strassen wurden jeweils von 18:00 – 22:30 Uhr gesperrt. London ohne Autos mit Lichtinstallationen ist einfach schoen.

Lumieres London

Lumieres London

Lumieres London

Lumieres London

Lumieres London

Lumieres London

Ein Aquarium in einer Telefonzelle

Lumieres London

Mehr Bilder

Upgrade from Drupal 6 to 8

So you have this bloody old Drupal 6 website and have to upgrade it to Drupal 8?

Good news! It’s possible to transfer most of your data!

Easy solution -> start watching this incredible video (Video is removed from YouTube 🙁 see comment)
In theory they are right!

My experiences in detail

I work on my local PC (OSX/MAMP)
Task is a German D6 Website, 6 years old with 1500 nodes, 10000 taxonomy terms, 10 content-types, 50+ contrib modules, a handmade theme … in short, a usual suspect

  • I created a copy of the old Drupal 6 database and imported it in my local MySQL
  • I installed a fresh Drupal 8
  • I installed and enabled the following modules
    https://www.drupal.org/project/migrate_upgrade
    https://www.drupal.org/project/migrate_tools
    https://www.drupal.org/project/migrate_plus
  • Upgrade UI-Version
    I navigated to http://localhost/newdrupal8/upgrade and fill the form. Upgrade worked but slow
  • Drush-version
    Next time I tried drush which is way faster
    drush migrate-upgrade --legacy-db-url=mysql://user:pass@localhost/d6db --legacy-root=http://olddrupal6site.com

If the database is bigger than 100 MB it seems to be better to use drush.

Problems (and a solution)

  • After the first run in the Upgrade UI, all nodes, menu links, users and taxonomy were in the new db but the nodes were without field values
  • Second try …  (new drupal 8, etc)
    Migration this time with drush – faster but same result
  • few more tries with different configuration ideas (don’t know anymore 🙂
  • fifth try – Idea: Hey, the source is a German site, may be it’s about language 🙂 #hope
Hagens-MacBook-Air:htdocs hagengraf$ drush dl drupal-8 --select
 Choose one of the available releases for drupal:
 [0]  :  Cancel
 [1]  :  8.1.x-dev    -  2016-Jan-08  -  Development
 [2]  :  8.0.2        -  2016-Jan-06  -  Supported, Recommended
 [3]  :  8.0.0-beta2  -  2014-Oct-15  -  Security

D8 Installation in German

some problems in settings.php (no MySQL connection). Don’t related to the upgrade (it was deep in the night).
Solution:

$databases['default']['default'] = array (
 'database' => 'd8',
 'username' => 'root',
 'password' => 'root',
 'prefix' => '',
 'host' => '127.0.0.1',
 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
 'port' => '3306',
 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
 'driver' => 'mysql',
 );

configuration with the following commands

cd drupal-8.0.2/
drush status
 drush dl migrate_upgrade, migrate_tools
 drush en migrate_upgrade, migrate_tools
 drush dl admin_toolbar
 drush en admin_toolbar_tools, admin_toolbar
 drush migrate-upgrade --legacy-db-url=mysql://root:root@localhost/fnd6 --legacy-root=http://olddrupal6site.de

and … all data imported but still  no files, no body field values

  • next try

I download the files from the old d6 site to http://localhost/old (5GB) and tried again …

Files were now imported, body field values too, but mysterious messages were shown in drush output. Still no values  were shown in a node (just the title).

Missing filter plugin: filter_null. [error]
Missing filter plugin: filter_null. [error]
Missing filter plugin: filter_null. [error]
  • next try – same problem than before – discovered possible reasons
    https://www.drupal.org/node/2397469
    https://www.drupal.org/node/2015313

Deactivated caption filter, php filter, image assist filter in old site (now in the local version)

  • next try – hurrah 🙂
    everything works! 180 MB data imported
    but
  • no views
  • lots of contrib modules missing (ads, iframes, sliders, all the stuff clients need 🙂 …)
  • different handling for images and a lot of topics
  • theme doesn’t work anymore

But hey … most of the data is imported!

Now the works starts on the rest 🙂


 

If you need help with your Drupal 6 to 8 upgrade …
ping me

Autarker Blumenkasten II – Feuchtigkeit messen

Teil I: Arduino Basteleien – Mein Plan

Nachdem ich ein paar Stunden alle möglichen Schaltungen nachgebaut habe, geht es nun an den autarken Blumenkasten.

Das ist der Beispielcode

/*
  # Example code for the moisture sensor
  # Editor     : Lauren
  # Date       : 13.01.2012
  # Version    : 1.0
  # Connect the sensor to the A0(Analog 0) pin on the Arduino board  
  # the sensor value description
  # 0  ~300     dry soil
  # 300~700     humid soil 
  # 700~950     in water
*/
void setup(){
  Serial.begin(57600);   
}
void loop(){ 
  Serial.print("Moisture Sensor Value:");
  Serial.println(analogRead(A0));  
  delay(100);
}

Nun will ich ja bei einem bestimmten Wert etwas tun. Also beispielsweise die Pumpe einschalten, die meinen trockenen Blumenkasten mit Wasser versorgt. Da ich noch keine Pumpe (und keine Ahnung) habe, will ich mal eine (rote) LED anschalten, wenn der Wert < als 100 ist (also wirklich “trocken”). Ich verändere den Code folgendermassen:

/*
  # Autarker Blumenkasten
  # Editor     : hagen@cocoate.com
  # Date       : 03.01.2016
  # Version    : 1.0
  # Connect the moisture sensor to the A0 (Analog 0) pin - Arduino
  # Connect the LED to the 10 (Digital 10) pin - Arduino
   
  # the moisture sensor value description
  # 0  ~300     dry soil
  # 300~700     humid soil
  # 700~950     in water
*/

int ledPin = 10; // red LED
int msv = 0;     // Moisture Sensor Value
 
void setup(){
  pinMode(ledPin, OUTPUT);
  Serial.begin(57600); 
}
 
void loop(){
  msv = analogRead(A0);
  Serial.print("Moisture Sensor Value:");
  Serial.println(msv);  
  if(msv<100){        // If the value is less than 100 the LED switches on = soil is dry  
    digitalWrite(ledPin,HIGH);   
  } else {
    digitalWrite(ledPin,LOW);
  }
  delay(100);  
}

Wenn ich den Sensor anfasse, ist die LED aus (Strom fliesst, “Erde trocken”). Lasse ich den Sensor los sinkt der Wert unter 100 und die LED leuchtet #freu. Im Video sieht das dann so aus.

Moisture Sensor

Todo

  • Anstelle der LED müsste sich natürlich eine Pumpe einschalten und Wasser pumpen, so lange bis der Feuchtigkeitswert wieder passt. Vielleicht brauche ich auch gar keine Pumpe und baue den Wasserbehälter einfach nach oben. Dann reicht die Schwerkraft zum tröpfeln und ich brauche nur Magnetventile – mal sehen.
  • Der Blumenkasten muss per WiFi um Hilfe rufen können, wenn kein Wasser mehr da ist (E-Mail oder Twitter). WiFi scheint ein Riesenthema und teuer zu sein. Habe diese beiden Shields gefunden Adafruit HUZZAH CC3000 WiFi Shield with Onboard Antenna (39,95 US$) oder die Original Variante von Arduino.cc Arduino WiFi Shield (Amazon ca. 90 €).
    Gerade habe ich noch ein preisgünstiges WiFi Modul gefunden –SparkFun WiFi Shield – ESP8266 (Amazon ca. 15 US$)

Falls jemand Erfahrung mit so etwas hat, bitte kommentieren. Ich freue mich über jede Hilfe.

Arduino Basteleien – Mein Plan

Beim 30c3 vor zwei Jahren habe ich das erste Mal etwas gelötet (MaxiLamps) und ein Arduino Starterkit ausprobiert. Zu meinem Geburtstag 2014 habe ich dann ein paar Sensoren erhalten, da ich den Plan geäussert hatte, unsere Gartenbewässerung mit Arduino zu organisieren (Danke nochmal dafür 🙂 ). MaxiLamps habe ich ganz putzig weiterentwickelt aber der Arduino ist mit Zubehör wegen Zeitmangel im Schrank geblieben.

Der Garten hat in der Zwischenzeit einen Wasseranschluss erhalten …

Tube

… und so war die Realisierung der Bewässerung erstmal erheblich einfacher. Anstelle einer Arduino Steuerung mit Regenwasser habe ich in 2015 eine Tröpfchenbewässerung von Gardena mit einem Bewässerungscomputer installiert. So sahen die Ergebnisse aus.

Tomatoes & Cucumbers

Vermutlich war es ganz gut, die Bewässerung zunächst mal mit herkömmlichem “Zeug” zu realisieren um ein Gefühl dafür zu bekommen, wie Bewässerung überhaupt funktioniert. Nach einem Jahr kann ich erstmal sagen:

Das Zeug von Gardena ist wirklich stabil und gut (Gardena 1874-20 Bewässerungscomputer MultiControl duo und zweimal Gardena 1399-20 Micro-Drip-System Start-Set).

Glücklicherweise ist das Drip-System sehr modular aufgebaut und ich kann es bestimmt für die Arduino Basteleien weiterverwenden.

Da das mit der Bewässerung im Garten nun gut läuft, will ich etwas anderes bauen

Plan

Ich möchte einen “autarken” Blumenkasten bauen, mit folgenden Features:

  • Wassertank
  • Pumpe/Arduino und Drip System Schläuche
  • Anbindung an WiFi
  • Stromversorgung per Solarzelle und Batterie
  • Wenn Erde trocken ist, soll gegossen werden und wenn der Tank fast leer ist, soll er einen Nachricht verschicken, damit jemand kommt und den Tank wieder füllt.

Erste Schritte

Ich habe einen Arduino Uno Rev3 (Original – Made in Italy) und ein Verbindungskabel zum PC. Auf dem PC (in meinem Fall ein Mac) braucht man die Arduino Software (IDE – Entwicklungsumgebung – kostenlos).

Arduino IDE

Der Arduino braucht Strom. Den bekommt er, wenn man ihn mit dem Verbindungkabel an den USB Port steckt. Um ein bischen warm mit dem System zu werden, habe ich heute ein kleines Programm geschrieben, dass den hello, art Morsecode auf einer blauen Leuchtdiode anzeigt.

hello, art - Morse Code

Es geht bestimmt eleganter aber dieser Code funktionierte auch 🙂

const unsigned int LED_PIN = 13;
const unsigned int LONG = 1000; 
const unsigned int SHORT = 200; 

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() { 
  // H ....
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  // E .
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(LONG); 
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  // L .-..
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(LONG); 
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  // L .-..
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(LONG);   
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  // O ---
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  // Komma gibt es nicht beim Morsen
  // Leerzeichen -...- 
  // A .-
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT); 
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(LONG);   
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  // R .-.
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  digitalWrite(LED_PIN, HIGH); 
  delay(LONG);   
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
  digitalWrite(LED_PIN, HIGH); 
  delay(SHORT);   
  digitalWrite(LED_PIN, LOW); 
  delay(SHORT); 
  // T -
  digitalWrite(LED_PIN, HIGH); 
  delay(LONG); 
  digitalWrite(LED_PIN, LOW); 
  delay(LONG);
}